[
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n  pull_request:\n\njobs:\n  test:\n    name: Test\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Check out the Repository\n        uses: actions/checkout@v4\n\n      - name: Install Packages\n        run: sudo apt-get update && sudo apt-get -y install pkg-config libusb-1.0 libudev-dev\n\n      - name: Install PNPM\n        uses: pnpm/action-setup@v4\n        id: pnpm-install\n        with:\n          version: 8\n          run_install: false\n\n      - name: Install Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: 'pnpm'\n\n      - name: Install Dependencies\n        run: pnpm install\n\n      - name: Install Foundry\n        uses: foundry-rs/foundry-toolchain@v1\n        with:\n          version: nightly\n\n      - name: Lint\n        run: pnpm lint\n\n      - name: Compile (Hardhat)\n        run: pnpm compile\n\n      - name: Test\n        run: pnpm test\n\n      - name: Compile (Foundry)\n        run: forge build\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.vscode/\n*/**/.DS_Store\n\n/node_modules\n\ndist\ncache\nartifacts\ntypechain-types\ncache-zk\nartifacts-zk\ndeployments-zk\n\ndeployments/mainnet/solcInputs/*\ndeployments/optimism/solcInputs/*\ndeployments/base/solcInputs/*\ndeployments/arbitrum-one/solcInputs/*\ndeployments/arbitrum-nova/solcInputs/*\ndeployments/polygon/solcInputs/*\ndeployments/scroll/solcInputs/*\ndeployments/zksync/solcInputs/*\ndeployments/celo/solcInputs/*\ndeployments/linea/solcInputs/*\ndeployments/telos/solcInputs/*\ndeployments/soneium/solcInputs/*\ndeployments/ink/solcInputs/*\ndeployments/unichain/solcInputs/*\ndeployments/sepolia/solcInputs/*\ndeployments/optimism-sepolia/solcInputs/*\ndeployments/optimism-goerli/solcInputs/*\ndeployments/base-sepolia/solcInputs/*\ndeployments/base-goerli/solcInputs/*\ndeployments/arbitrum-sepolia/solcInputs/*\ndeployments/polygon-amoy/solcInputs/*\ndeployments/scroll-sepolia/solcInputs/*\ndeployments/linea-goerli/solcInputs/*\ndeployments/hardhat/*\n!deployments/hardhat/.chainId\n\n.coverage_artifacts\n.coverage_contracts\n/coverage\n/coverage.json\nallFiredEvents\nscTopics\n\n.env*\n!.env.template\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"plugins\": [\"@ianvs/prettier-plugin-sort-imports\", \"prettier-package-json\", \"prettier-plugin-solidity\"],\n  \"overrides\": [\n    {\n      \"files\": \"*.sol\",\n      \"options\": {\n        \"tabWidth\": 4,\n        \"singleQuote\": false\n      }\n    }\n  ],\n  \"printWidth\": 120,\n  \"tabWidth\": 2,\n  \"useTabs\": false,\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"trailingComma\": \"none\",\n  \"arrowParens\": \"always\",\n  \"bracketSpacing\": true,\n  \"importOrderTypeScriptVersion\": \"5.0.0\"\n}\n"
  },
  {
    "path": ".solcover.ts",
    "content": "module.exports = {\n  skipFiles: ['tests']\n};\n"
  },
  {
    "path": ".solhint.json",
    "content": "{\n  \"extends\": \"solhint:recommended\",\n  \"rules\": {\n    \"avoid-throw\": \"off\",\n    \"avoid-suicide\": \"error\",\n    \"avoid-sha3\": \"warn\",\n    \"not-rely-on-time\": \"off\",\n    \"no-empty-blocks\": \"off\",\n    \"mark-callable-contracts\": \"off\",\n    \"func-visibility\": [\"error\", { \"ignoreConstructors\": true }],\n    \"func-named-parameters\": \"off\",\n    \"immutable-vars-naming\": \"off\",\n    \"compiler-version\": [\"error\", \"^0.8.0\"],\n    \"imports-order\": \"warn\"\n  }\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Leonid Beder\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 NON-INFRINGEMENT. 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": "README.md",
    "content": "# Ethereum Attestation Service\n\n[![Docs](https://img.shields.io/badge/docs-%F0%9F%93%84-blue)](https://eas.eth.link)\n[![NPM Package](https://img.shields.io/npm/v/@ethereum-attestation-service/eas-contracts.svg)](https://www.npmjs.org/package/@ethereum-attestation-service/eas-contracts)\n[![Test](https://github.com/ethereum-attestation-service/eas-contracts/actions/workflows/ci.yml/badge.svg)](https://github.com/ethereum-attestation-service/eas-contracts/actions/workflows/ci.yml)\n[![License](https://img.shields.io/github/license/ethereum-attestation-service/eas-contracts?style=flat-square)](https://github.com/ethereum-attestation-service/eas-contracts/blob/master/LICENSE)\n\n## Introduction\n\nThe Ethereum Attestation Service is a free and open protocol for on-chain attestations on EVM compatible blockchains. It is a generalized service that allows anyone to register a schema for their particular use case, and then make attestations following their schema.\n\nSchemas can be registered using the `SchemaRegistry.sol` contract, and attestations are made using the `EAS.sol` contract.\n\nIn addition, we provide a resolver contract for advanced use cases, such as on-chain verification of attestation data, and also attaching payments to attestations (which makes a new suite of powerful web3 applications possible).\n\nWe also provide an SDK for developers.\n\nOn-chain attestations will enable a powerful new range of web3 applications, including:\n\n* Identity\n* Trust Scores\n* Goodness Scores\n* Credit Scores\n* Clout\n* Land Registries\n* Social Networks\n* Portable Trust Layers\n* Retroactive Public Goods Funding\n* KYC Services\n* Uncollateralized Lending / Borrowing\n* Voting\n* Oracles (who can be atomically paid for making attestations inside the protocol)\n* Likes/Dislikes\n* Content Filtering\n* And many more!\n\n## Deployments\n\nPlease note that you can also import and use the addresses directly in your code using the `@ethereum-attestation-service/eas-contracts/deployments` deployment artifacts corresponding to your desired network.\n\n### Mainnets\n\n#### Ethereum\n\nVersion 0.26:\n\n* **EAS**:\n  * Contract: [0xA1207F3BBa224E2c9c3c6D5aF63D0eb1582Ce587](https://etherscan.io/address/0xA1207F3BBa224E2c9c3c6D5aF63D0eb1582Ce587)\n  * Deployment and ABI: [EAS.json](./deployments/mainnet/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0xA7b39296258348C78294F95B872b282326A97BDF](https://etherscan.io/address/0xA7b39296258348C78294F95B872b282326A97BDF)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/mainnet/SchemaRegistry.json)\n\n#### Optimism\n\nVersion 1.0.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/optimism/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/optimism/SchemaRegistry.json)\n\nVersion 1.2.0:\n\n* **EIP712Proxy**:\n  * Contract: [0xE132c2E90274B44FfD8090b58399D04ddc060AE1](https://optimistic.etherscan.io/address/0xE132c2E90274B44FfD8090b58399D04ddc060AE1)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/optimism/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x6dd0CB3C3711c8B5d03b3790e5339Bbc2Bbcf934](https://optimistic.etherscan.io/address/0x6dd0CB3C3711c8B5d03b3790e5339Bbc2Bbcf934)\n  * Deployment and ABI: [Indexer.json](./deployments/optimism/Indexer.json)\n\n#### Base\n\nVersion 1.0.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://basescan.org/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/base/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://basescan.org/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/base/SchemaRegistry.json)\n\nVersion 1.2.0:\n\n* **EIP712Proxy**:\n  * Contract: [0xF095fE4b23958b08D38e52d5d5674bBF0C03cbF6](https://basescan.org/address/0xF095fE4b23958b08D38e52d5d5674bBF0C03cbF6)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/base/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x37AC6006646f2e687B7fB379F549Dc7634dF5b84](https://basescan.org/address/0x37AC6006646f2e687B7fB379F549Dc7634dF5b84)\n  * Deployment and ABI: [Indexer.json](./deployments/base/Indexer.json)\n\n#### Arbitrum One\n\nVersion 0.26:\n\n* **EAS**:\n  * Contract: [0xbD75f629A22Dc1ceD33dDA0b68c546A1c035c458](https://arbiscan.io/address/0xbD75f629A22Dc1ceD33dDA0b68c546A1c035c458)\n  * Deployment and ABI: [EAS.json](./deployments/arbitrum-one/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0xA310da9c5B885E7fb3fbA9D66E9Ba6Df512b78eB](https://arbiscan.io/address/0xA310da9c5B885E7fb3fbA9D66E9Ba6Df512b78eB)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/arbitrum-one/SchemaRegistry.json)\n\n#### Arbitrum Nova\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0x6d3dC0Fe5351087E3Af3bDe8eB3F7350ed894fc3](https://nova.arbiscan.io/address/0x6d3dC0Fe5351087E3Af3bDe8eB3F7350ed894fc3)\n  * Deployment and ABI: [EAS.json](./deployments/arbitrum-nova/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x49563d0DA8DF38ef2eBF9C1167270334D72cE0AE](https://nova.arbiscan.io/address/0x49563d0DA8DF38ef2eBF9C1167270334D72cE0AE)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/arbitrum-nova/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0xEbf2DeeD690F8A68b8248d6a12231ee70ED2154A](https://nova.arbiscan.io/address/0xEbf2DeeD690F8A68b8248d6a12231ee70ED2154A)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/arbitrum-nova/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x7182Be5e84aFEe9Dc29C69D081F8A0FA834d6CB8](https://nova.arbiscan.io/address/0x7182Be5e84aFEe9Dc29C69D081F8A0FA834d6CB8)\n  * Deployment and ABI: [Indexer.json](./deployments/arbitrum-nova/Indexer.json)\n\n#### Polygon\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0x5E634ef5355f45A855d02D66eCD687b1502AF790](https://polygonscan.com/address/0x5E634ef5355f45A855d02D66eCD687b1502AF790)\n  * Deployment and ABI: [EAS.json](./deployments/polygon/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x7876EEF51A891E737AF8ba5A5E0f0Fd29073D5a7](https://polygonscan.com/address/0x7876EEF51A891E737AF8ba5A5E0f0Fd29073D5a7)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/polygon/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x4be71865917C7907ccA531270181D9B7dD4f2733](https://polygonscan.com/address/0x4be71865917C7907ccA531270181D9B7dD4f2733)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/polygon/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x12d0f50Eb2d67b14293bdDA2C248358f3dfE5308](https://polygonscan.com/address/0x12d0f50Eb2d67b14293bdDA2C248358f3dfE5308)\n  * Deployment and ABI: [Indexer.json](./deployments/polygon/Indexer.json)\n\n#### Scroll\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0xC47300428b6AD2c7D03BB76D05A176058b47E6B0](https://scrollscan.com/address/0xC47300428b6AD2c7D03BB76D05A176058b47E6B0)\n  * Deployment and ABI: [EAS.json](./deployments/scroll/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6](https://scrollscan.com/address/0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/scroll/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x77b7DA1c40762Cd8AFfE2069b575328EfD4D9801](https://scrollscan.com/address/0x77b7DA1c40762Cd8AFfE2069b575328EfD4D9801)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/scroll/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x8314bc1B2f7F286cb4f0323FE7119C0F99D4A083](https://scrollscan.com/address/0x8314bc1B2f7F286cb4f0323FE7119C0F99D4A083)\n  * Deployment and ABI: [Indexer.json](./deployments/scroll/Indexer.json)\n\n#### zkSync\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0x21d8d4eE83b80bc0Cc0f2B7df3117Cf212d02901](https://explorer.zksync.io/address/0x21d8d4eE83b80bc0Cc0f2B7df3117Cf212d02901)\n  * Deployment and ABI: [EAS.json](./deployments/zksync/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0xB8566376dFe68B76FA985D5448cc2FbD578412a2](https://explorer.zksync.io/address/0xB8566376dFe68B76FA985D5448cc2FbD578412a2)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/zksync/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x8E8F79e9A1Cd4da7bD2f15e5B0a4B4a613E37C5a](https://explorer.zksync.io/address/0x8E8F79e9A1Cd4da7bD2f15e5B0a4B4a613E37C5a)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/zksync/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x8AdA7852df64A66ca89EFc82144e6be71Bd53B4E](https://explorer.zksync.io/address/0x8AdA7852df64A66ca89EFc82144e6be71Bd53B4E)\n  * Deployment and ABI: [Indexer.json](./deployments/zksync/Indexer.json)\n\n#### Celo\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0x72E1d8ccf5299fb36fEfD8CC4394B8ef7e98Af92](https://celoscan.io/address/0x72E1d8ccf5299fb36fEfD8CC4394B8ef7e98Af92)\n  * Deployment and ABI: [EAS.json](./deployments/celo/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x5ece93bE4BDCF293Ed61FA78698B594F2135AF34](https://celoscan.io/address/0x5ece93bE4BDCF293Ed61FA78698B594F2135AF34)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/celo/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x6792B6AE17c6416016b943585e957a29bc452806](https://celoscan.io/address/0x6792B6AE17c6416016b943585e957a29bc452806)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/celo/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x76591b332d0F099E89FA335fC827D44C47705D2f](https://celoscan.io/address/0x76591b332d0F099E89FA335fC827D44C47705D2f)\n  * Deployment and ABI: [Indexer.json](./deployments/celo/Indexer.json)\n\n#### Telos\n\nVersion 1.4.0:\n\n* **EAS**:\n  * Contract: [0x9898C3FF2fdCA9E734556fC4BCCd5b9239218155](https://teloscan.io/address/0x9898C3FF2fdCA9E734556fC4BCCd5b9239218155)\n  * Deployment and ABI: [EAS.json](./deployments/telos/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x842511adC21B85C0B2fdB02AAcFA92fdf7Cda470](https://teloscan.io/address/0x842511adC21B85C0B2fdB02AAcFA92fdf7Cda470)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/telos/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0xA76973759A350D4D7EC7aF042c6c2A32be861AD9](https://teloscan.io/address/0xA76973759A350D4D7EC7aF042c6c2A32be861AD9)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/telos/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x6Abe1F9489B97d9f11E1347567f61137BC61B6F9](https://teloscan.io/address/0x6Abe1F9489B97d9f11E1347567f61137BC61B6F9)\n  * Deployment and ABI: [Indexer.json](./deployments/telos/Indexer.json)\n\n#### Soneium\n\nVersion 1.4.1-beta.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://soneium.blockscout.com/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/soneium/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://soneium.blockscout.com/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/soneium/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x465a34dd6dDb5DF22DBC67D005b5BF4a0BF7f8AE](https://soneium.blockscout.com/address/0x465a34dd6dDb5DF22DBC67D005b5BF4a0BF7f8AE)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/soneium/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x16613642e9793d413c296f9AB5457077b99AA7B0](https://soneium.blockscout.com/address/0x16613642e9793d413c296f9AB5457077b99AA7B0)\n  * Deployment and ABI: [Indexer.json](./deployments/soneium/Indexer.json)\n\n#### Ink\n\nVersion 1.4.1-beta.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/ink/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://explorer.inkonchain.com/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/ink/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x6511967899445c5944f555Fe2B2D5EC4D74d2579](https://explorer.inkonchain.com/address/0x6511967899445c5944f555Fe2B2D5EC4D74d2579)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/ink/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0xd87dCB0E5E0044Ba5Aa57D383cd3f8D0509a42b9](https://explorer.inkonchain.com/address/0xd87dCB0E5E0044Ba5Aa57D383cd3f8D0509a42b9)\n  * Deployment and ABI: [Indexer.json](./deployments/ink/Indexer.json)\n\n#### Unichain\n\nVersion 1.4.1-beta.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://uniscan.xyz/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/unichain/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://uniscan.xyz/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/unichain/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x65c83e3C5f1505C4220B2f57815285Dc58464088](https://uniscan.xyz/address/0x65c83e3C5f1505C4220B2f57815285Dc58464088)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/unichain/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0xE6afd49f7beF444e39BFDFbB6BE63119a8BdE88F](https://uniscan.xyz/address/0xE6afd49f7beF444e39BFDFbB6BE63119a8BdE88F)\n  * Deployment and ABI: [Indexer.json](./deployments/unichain/Indexer.json)\n\n#### Blast\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://blastscan.io/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/blast/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://blastscan.io/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/blast/SchemaRegistry.json)\n\n#### Linea\n\nVersion 1.2.0:\n\n* **EAS**:\n  * Contract: [0xaEF4103A04090071165F78D45D83A0C0782c2B2a](https://lineascan.build/address/0xaEF4103A04090071165F78D45D83A0C0782c2B2a)\n  * Deployment and ABI: [EAS.json](./deployments/linea/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797](https://lineascan.build/address/0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/linea/SchemaRegistry.json)\n\n### Testnets\n\n#### Sepolia\n\nVersion 0.26:\n\n* **EAS**:\n  * Contract: [0xC2679fBD37d54388Ce493F1DB75320D236e1815e](https://sepolia.etherscan.io/address/0xC2679fBD37d54388Ce493F1DB75320D236e1815e)\n  * Deployment and ABI: [EAS.json](./deployments/sepolia/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x0a7E2Ff54e76B8E6659aedc9103FB21c038050D0](https://sepolia.etherscan.io/address/0x0a7E2Ff54e76B8E6659aedc9103FB21c038050D0)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/sepolia/SchemaRegistry.json)\n\nVersion 1.2.0:\n\n* **EIP712Proxy**:\n  * Contract: [0x9C9d17bEE150E4eCDf3b99baFA62c08Cb30E82BC](https://sepolia.etherscan.io/address/0x9C9d17bEE150E4eCDf3b99baFA62c08Cb30E82BC)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/sepolia/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0xaEF4103A04090071165F78D45D83A0C0782c2B2a](https://sepolia.etherscan.io/address/0xaEF4103A04090071165F78D45D83A0C0782c2B2a)\n  * Deployment and ABI: [Indexer.json](./deployments/sepolia/Indexer.json)\n\n#### Optimism Sepolia\n\nVersion 1.0.2:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://sepolia-optimism.etherscan.io/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/optimism-sepolia/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://sepolia-optimism.etherscan.io/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/optimism-sepolia/SchemaRegistry.json)\n\nVersion 1.3.0:\n\n* **EIP712Proxy**:\n  * Contract: [0x37AC6006646f2e687B7fB379F549Dc7634dF5b84](https://sepolia-optimism.etherscan.io/address/0x37AC6006646f2e687B7fB379F549Dc7634dF5b84)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/optimism-sepolia/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x97e6822A36E38D4d93C0c810CC2be1C6Fd492b64](https://sepolia-optimism.etherscan.io/address/0x97e6822A36E38D4d93C0c810CC2be1C6Fd492b64)\n  * Deployment and ABI: [Indexer.json](./deployments/optimism-sepolia/Indexer.json)\n\n#### Optimism Goerli\n\nVersion 1.0.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://goerli-optimism.etherscan.io/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/optimism-goerli/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://goerli-optimism.etherscan.io/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/optimism-goerli/SchemaRegistry.json)\n\nVersion 1.2.0:\n\n* **EIP712Proxy**:\n  * Contract: [0x88D1bd62AC014424b987CE5ABf311BD7749e426B](https://goerli-optimism.etherscan.io/address/0x88D1bd62AC014424b987CE5ABf311BD7749e426B)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/optimism-goerli/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0xa42428D1bf904d762adD02b27ADac26d53643782](https://goerli-optimism.etherscan.io/address/0xa42428D1bf904d762adD02b27ADac26d53643782)\n  * Deployment and ABI: [Indexer.json](./deployments/optimism-goerli/Indexer.json)\n\n#### Base Sepolia\n\nVersion 1.2.0:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://sepolia.basescan.org/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/base-sepolia/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://sepolia.basescan.org/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/base-sepolia/SchemaRegistry.json)\n\nVersion 1.3.0:\n\n* **EIP712Proxy**:\n  * Contract: [0xAd64A04c20dDBbA7cBb0EcAe4823095B4adA5c57](https://sepolia.basescan.org/address/0xAd64A04c20dDBbA7cBb0EcAe4823095B4adA5c57)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/base-sepolia/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x2C7BCE69D5Ee84EF73CC9286416F68E60F9A61b3](https://sepolia.basescan.org/address/0x2C7BCE69D5Ee84EF73CC9286416F68E60F9A61b3)\n  * Deployment and ABI: [Indexer.json](./deployments/base-sepolia/Indexer.json)\n\n#### Base Goerli\n\nVersion 1.0.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://goerli.basescan.org/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/base-goerli/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://goerli.basescan.org/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/base-goerli/SchemaRegistry.json)\n\nVersion 1.2.0:\n\n* **EIP712Proxy**:\n  * Contract: [0x37AC6006646f2e687B7fB379F549Dc7634dF5b84](https://goerli.basescan.org/address/0x37AC6006646f2e687B7fB379F549Dc7634dF5b84)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/base-goerli/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0xE0893F47009776D6aEC3De8455Cb0ed325Eea74a](https://goerli.basescan.org/address/0xE0893F47009776D6aEC3De8455Cb0ed325Eea74a)\n  * Deployment and ABI: [Indexer.json](./deployments/base-goerli/Indexer.json)\n\n#### Arbitrum Sepolia\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0x2521021fc8BF070473E1e1801D3c7B4aB701E1dE](https:/sepolia.arbiscan.io/address/0x2521021fc8BF070473E1e1801D3c7B4aB701E1dE)\n  * Deployment and ABI: [EAS.json](./deployments/arbitrum-sepolia/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x45CB6Fa0870a8Af06796Ac15915619a0f22cd475](https:/sepolia.arbiscan.io/address/0x45CB6Fa0870a8Af06796Ac15915619a0f22cd475)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/arbitrum-sepolia/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x8E807011c16E538B2dEEf1dc652EFe7724E09397](https://sepolia.arbiscan.io/address/0x8E807011c16E538B2dEEf1dc652EFe7724E09397)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/arbitrum-sepolia/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x501D6d86240De5A57E91414356ad4B1778F0AB18](https://sepolia.arbiscan.io/address/0x501D6d86240De5A57E91414356ad4B1778F0AB18)\n  * Deployment and ABI: [Indexer.json](./deployments/arbitrum-sepolia/Indexer.json)\n\n#### Polygon Amoy\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0xb101275a60d8bfb14529C421899aD7CA1Ae5B5Fc](https://amoy.polygonscan.com/address/0xb101275a60d8bfb14529C421899aD7CA1Ae5B5Fc)\n  * Deployment and ABI: [EAS.json](./deployments/polygon-amoy/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x23c5701A1BDa89C61d181BD79E5203c730708AE7](https://amoy.polygonscan.com/address/0x23c5701A1BDa89C61d181BD79E5203c730708AE7)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/polygon-amoy/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0xA0ec8a80a0b8496B9Cf6Ee703bC16ABdC9F4cf2e](https://amoy.polygonscan.com/address/0xA0ec8a80a0b8496B9Cf6Ee703bC16ABdC9F4cf2e)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/polygon-amoy/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x9F07c0B0E52C36D78Ac8ABfC543c77f83888ac64](https://amoy.polygonscan.com/address/0x9F07c0B0E52C36D78Ac8ABfC543c77f83888ac64)\n  * Deployment and ABI: [Indexer.json](./deployments/polygon-amoy/Indexer.json)\n\n#### Scroll Sepolia\n\nVersion 1.3.0:\n\n* **EAS**:\n  * Contract: [0xaEF4103A04090071165F78D45D83A0C0782c2B2a](https://sepolia.scrollscan.com/address/0xaEF4103A04090071165F78D45D83A0C0782c2B2a)\n  * Deployment and ABI: [EAS.json](./deployments/scroll-sepolia/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797](https://sepolia.scrollscan.com/address/0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/scroll-sepolia/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b](https://sepolia.scrollscan.com/address/0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/scroll-sepolia/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17](https://sepolia.scrollscan.com/address/0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17)\n  * Deployment and ABI: [Indexer.json](./deployments/scroll-sepolia/Indexer.json)\n\n#### Ink Sepolia\n\nVersion 1.4.1-beta.1:\n\n* **EAS**:\n  * Contract: [0x4200000000000000000000000000000000000021](https://explorer-sepolia.inkonchain.com/address/0x4200000000000000000000000000000000000021)\n  * Deployment and ABI: [EAS.json](./deployments/ink-sepolia/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x4200000000000000000000000000000000000020](https://explorer-sepolia.inkonchain.com/address/0x4200000000000000000000000000000000000020)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/ink-sepolia/SchemaRegistry.json)\n* **EIP712Proxy**:\n  * Contract: [0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F](https://explorer-sepolia.inkonchain.com/address/0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F)\n  * Deployment and ABI: [EIP712Proxy.json](./deployments/ink-sepolia/EIP712Proxy.json)\n* **Indexer**:\n  * Contract: [0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e](https://explorer-sepolia.inkonchain.com/address/0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e)\n  * Deployment and ABI: [Indexer.json](./deployments/ink-sepolia/Indexer.json)\n\n#### Linea Goerli\n\nVersion 1.2.0:\n\n* **EAS**:\n  * Contract: [0xaEF4103A04090071165F78D45D83A0C0782c2B2a](https://goerli.lineascan.build/address/0xaEF4103A04090071165F78D45D83A0C0782c2B2a)\n  * Deployment and ABI: [EAS.json](./deployments/linea-goerli/EAS.json)\n* **SchemaRegistry**:\n  * Contract: [0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797](https://goerli.lineascan.build/address/0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797)\n  * Deployment and ABI: [SchemaRegistry.json](./deployments/linea-goerli/SchemaRegistry.json)\n\n## Installation\n\n```sh\npnpm add @ethereum-attestation-service/eas-contracts\n```\n\n## Testing\n\nTesting the protocol is possible via multiple approaches:\n\n### Unit Tests\n\nYou can run the full test suite via:\n\n```sh\npnpm test\n```\n\n### Test Coverage\n\n#### Latest Test Coverage Report (2023-10-31)\n\n* 100% Statements 350/350\n* 100% Branches 172/172\n* 100% Functions 120/120\n* 100% Lines 491/491\n\n```sh\n----------------------------------|----------|----------|----------|----------|----------------|\nFile                              |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |\n----------------------------------|----------|----------|----------|----------|----------------|\n contracts/                       |      100 |      100 |      100 |      100 |                |\n  Common.sol                      |      100 |      100 |      100 |      100 |                |\n  EAS.sol                         |      100 |      100 |      100 |      100 |                |\n  IEAS.sol                        |      100 |      100 |      100 |      100 |                |\n  ISchemaRegistry.sol             |      100 |      100 |      100 |      100 |                |\n  Indexer.sol                     |      100 |      100 |      100 |      100 |                |\n  SchemaRegistry.sol              |      100 |      100 |      100 |      100 |                |\n  Semver.sol                      |      100 |      100 |      100 |      100 |                |\n contracts/eip1271/               |      100 |      100 |      100 |      100 |                |\n  EIP1271Verifier.sol             |      100 |      100 |      100 |      100 |                |\n contracts/eip712/proxy/          |      100 |      100 |      100 |      100 |                |\n  EIP712Proxy.sol                 |      100 |      100 |      100 |      100 |                |\n contracts/eip712/proxy/examples/ |      100 |      100 |      100 |      100 |                |\n  PermissionedEIP712Proxy.sol     |      100 |      100 |      100 |      100 |                |\n contracts/resolver/              |      100 |      100 |      100 |      100 |                |\n  ISchemaResolver.sol             |      100 |      100 |      100 |      100 |                |\n  SchemaResolver.sol              |      100 |      100 |      100 |      100 |                |\n contracts/resolver/examples/     |      100 |      100 |      100 |      100 |                |\n  AttestationResolver.sol         |      100 |      100 |      100 |      100 |                |\n  AttesterResolver.sol            |      100 |      100 |      100 |      100 |                |\n  DataResolver.sol                |      100 |      100 |      100 |      100 |                |\n  ExpirationTimeResolver.sol      |      100 |      100 |      100 |      100 |                |\n  PayingResolver.sol              |      100 |      100 |      100 |      100 |                |\n  RecipientResolver.sol           |      100 |      100 |      100 |      100 |                |\n  RevocationResolver.sol          |      100 |      100 |      100 |      100 |                |\n  TokenResolver.sol               |      100 |      100 |      100 |      100 |                |\n  ValueResolver.sol               |      100 |      100 |      100 |      100 |                |\n----------------------------------|----------|----------|----------|----------|----------------|\nAll files                         |      100 |      100 |      100 |      100 |                |\n----------------------------------|----------|----------|----------|----------|----------------|\n```\n\n#### Instructions\n\nIn order to audit the test coverage of the full test suite, run:\n\n```sh\npnpm test:coverage\n```\n\n## Profiling\n\nYou can profile the gas costs of all of the user-focused flows via:\n\n```sh\npnpm test:profile\n```\n\n## License\n\nEAS is open source and distributed under the MIT License (see [`LICENSE`](./LICENSE)).\n"
  },
  {
    "path": "components/Contracts.ts",
    "content": "import { ContractFactory, Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport {\n  AttestationResolver__factory,\n  AttesterResolver__factory,\n  DataResolver__factory,\n  EAS__factory,\n  ExpirationTimeResolver__factory,\n  Indexer__factory,\n  PayingResolver__factory,\n  PermissionedEIP712Proxy__factory,\n  RecipientResolver__factory,\n  RevocationResolver__factory,\n  SchemaRegistry__factory,\n  TestEAS__factory,\n  TestEIP712Proxy__factory,\n  TestEIP1271Signer__factory,\n  TestEIP1271Verifier__factory,\n  TestERC20Token__factory,\n  TestSchemaResolver__factory,\n  TokenResolver__factory,\n  ValueResolver__factory\n} from '../typechain-types';\n\nexport * from '../typechain-types';\n\ntype AsyncReturnType<T extends (...args: any) => any> = T extends (...args: any) => Promise<infer U>\n  ? U\n  : T extends (...args: any) => infer U\n    ? U\n    : any;\n\ntype Contract<F extends ContractFactory> = AsyncReturnType<F['deploy']>;\n\nexport interface ContractBuilder<F extends ContractFactory> {\n  metadata: {\n    bytecode: string;\n  };\n  deploy(...args: Parameters<F['deploy']>): Promise<Contract<F>>;\n  attach(address: string, passedSigner?: Signer): Promise<Contract<F>>;\n}\n\nexport type FactoryConstructor<F extends ContractFactory> = {\n  new (signer?: Signer): F;\n  abi: unknown;\n  bytecode: string;\n};\n\nexport const deployOrAttach = <F extends ContractFactory>(\n  FactoryConstructor: FactoryConstructor<F>,\n  initialSigner?: Signer\n): ContractBuilder<F> => {\n  return {\n    metadata: {\n      bytecode: FactoryConstructor.bytecode\n    },\n    deploy: async (...args: Parameters<F['deploy']>): Promise<Contract<F>> => {\n      const defaultSigner = initialSigner ?? ((await ethers.getSigners())[0] as any as Signer);\n\n      return new FactoryConstructor(defaultSigner).deploy(...(args || [])) as Promise<Contract<F>>;\n    },\n    attach: attachOnly<F>(FactoryConstructor, initialSigner).attach\n  };\n};\n\nexport const attachOnly = <F extends ContractFactory>(\n  FactoryConstructor: FactoryConstructor<F>,\n  initialSigner?: Signer\n) => {\n  return {\n    attach: async (address: string, signer?: Signer): Promise<Contract<F>> => {\n      const defaultSigner = initialSigner ?? ((await ethers.getSigners())[0] as any as Signer);\n      return new FactoryConstructor(signer ?? defaultSigner).attach(address) as Contract<F>;\n    }\n  };\n};\n\nconst getContracts = (signer?: Signer) => ({\n  connect: (signer: Signer) => getContracts(signer),\n\n  AttestationResolver: deployOrAttach(AttestationResolver__factory, signer),\n  AttesterResolver: deployOrAttach(AttesterResolver__factory, signer),\n  DataResolver: deployOrAttach(DataResolver__factory, signer),\n  EAS: deployOrAttach(EAS__factory, signer),\n  ExpirationTimeResolver: deployOrAttach(ExpirationTimeResolver__factory, signer),\n  Indexer: deployOrAttach(Indexer__factory, signer),\n  PayingResolver: deployOrAttach(PayingResolver__factory, signer),\n  PermissionedEIP712Proxy: deployOrAttach(PermissionedEIP712Proxy__factory, signer),\n  RecipientResolver: deployOrAttach(RecipientResolver__factory, signer),\n  RevocationResolver: deployOrAttach(RevocationResolver__factory, signer),\n  SchemaRegistry: deployOrAttach(SchemaRegistry__factory, signer),\n  TestEAS: deployOrAttach(TestEAS__factory, signer),\n  TestEIP712Proxy: deployOrAttach(TestEIP712Proxy__factory, signer),\n  TestEIP1271Signer: deployOrAttach(TestEIP1271Signer__factory, signer),\n  TestEIP1271Verifier: deployOrAttach(TestEIP1271Verifier__factory, signer),\n  TestERC20Token: deployOrAttach(TestERC20Token__factory, signer),\n  TestSchemaResolver: deployOrAttach(TestSchemaResolver__factory, signer),\n  TokenResolver: deployOrAttach(TokenResolver__factory, signer),\n  ValueResolver: deployOrAttach(ValueResolver__factory, signer)\n});\n\nexport default getContracts();\n"
  },
  {
    "path": "contracts/Common.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n// A representation of an empty/uninitialized UID.\nbytes32 constant EMPTY_UID = 0;\n\n// A zero expiration represents an non-expiring attestation.\nuint64 constant NO_EXPIRATION_TIME = 0;\n\nerror AccessDenied();\nerror DeadlineExpired();\nerror InvalidEAS();\nerror InvalidLength();\nerror InvalidSignature();\nerror NotFound();\n\n/// @notice A struct representing ECDSA signature data.\nstruct Signature {\n    uint8 v; // The recovery ID.\n    bytes32 r; // The x-coordinate of the nonce R.\n    bytes32 s; // The signature data.\n}\n\n/// @notice A struct representing a single attestation.\nstruct Attestation {\n    bytes32 uid; // A unique identifier of the attestation.\n    bytes32 schema; // The unique identifier of the schema.\n    uint64 time; // The time when the attestation was created (Unix timestamp).\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\n    bytes32 refUID; // The UID of the related attestation.\n    address recipient; // The recipient of the attestation.\n    address attester; // The attester/sender of the attestation.\n    bool revocable; // Whether the attestation is revocable.\n    bytes data; // Custom attestation data.\n}\n"
  },
  {
    "path": "contracts/EAS.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { EIP1271Verifier } from \"./eip1271/EIP1271Verifier.sol\";\n\nimport { ISchemaResolver } from \"./resolver/ISchemaResolver.sol\";\n\n// prettier-ignore\nimport {\n    AccessDenied,\n    EMPTY_UID,\n    InvalidLength,\n    NotFound,\n    NO_EXPIRATION_TIME\n} from \"./Common.sol\";\n\n// prettier-ignore\nimport {\n    Attestation,\n    AttestationRequest,\n    AttestationRequestData,\n    DelegatedAttestationRequest,\n    DelegatedRevocationRequest,\n    IEAS,\n    MultiAttestationRequest,\n    MultiDelegatedAttestationRequest,\n    MultiDelegatedRevocationRequest,\n    MultiRevocationRequest,\n    RevocationRequest,\n    RevocationRequestData\n} from \"./IEAS.sol\";\n\nimport { Semver } from \"./Semver.sol\";\nimport { ISchemaRegistry, SchemaRecord } from \"./ISchemaRegistry.sol\";\n\n/// @title EAS\n/// @notice The Ethereum Attestation Service protocol.\ncontract EAS is IEAS, Semver, EIP1271Verifier {\n    using Address for address payable;\n\n    error AlreadyRevoked();\n    error AlreadyRevokedOffchain();\n    error AlreadyTimestamped();\n    error InsufficientValue();\n    error InvalidAttestation();\n    error InvalidAttestations();\n    error InvalidExpirationTime();\n    error InvalidOffset();\n    error InvalidRegistry();\n    error InvalidRevocation();\n    error InvalidRevocations();\n    error InvalidSchema();\n    error InvalidVerifier();\n    error Irrevocable();\n    error NotPayable();\n    error WrongSchema();\n\n    /// @notice A struct representing an internal attestation result.\n    struct AttestationsResult {\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\n        bytes32[] uids; // UIDs of the new attestations.\n    }\n\n    // The global schema registry.\n    ISchemaRegistry private immutable _schemaRegistry;\n\n    // The global mapping between attestations and their UIDs.\n    mapping(bytes32 uid => Attestation attestation) private _db;\n\n    // The global mapping between data and their timestamps.\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\n\n    // The global mapping between data and their revocation timestamps.\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\n\n    /// @dev Creates a new EAS instance.\n    /// @param registry The address of the global schema registry.\n    constructor(ISchemaRegistry registry) Semver(1, 4, 0) EIP1271Verifier(\"EAS\", \"1.4.0\") {\n        if (address(registry) == address(0)) {\n            revert InvalidRegistry();\n        }\n\n        _schemaRegistry = registry;\n    }\n\n    /// @inheritdoc IEAS\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\n        return _schemaRegistry;\n    }\n\n    /// @inheritdoc IEAS\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\n        data[0] = request.data;\n\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\n    }\n\n    /// @inheritdoc IEAS\n    function attestByDelegation(\n        DelegatedAttestationRequest calldata delegatedRequest\n    ) external payable returns (bytes32) {\n        _verifyAttest(delegatedRequest);\n\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\n        data[0] = delegatedRequest.data;\n\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\n    }\n\n    /// @inheritdoc IEAS\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\n        // all the returned UIDs into a single list.\n        uint256 length = multiRequests.length;\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\n        uint256 totalUIDCount = 0;\n\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n        // possible to send too much ETH anyway.\n        uint256 availableValue = msg.value;\n\n        for (uint256 i = 0; i < length; ++i) {\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n            // last and final batch).\n            bool last;\n            unchecked {\n                last = i == length - 1;\n            }\n\n            // Process the current batch of attestations.\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\n\n            // Ensure that data isn't empty.\n            if (multiRequest.data.length == 0) {\n                revert InvalidLength();\n            }\n\n            AttestationsResult memory res = _attest(\n                multiRequest.schema,\n                multiRequest.data,\n                msg.sender,\n                availableValue,\n                last\n            );\n\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n            availableValue -= res.usedValue;\n\n            // Collect UIDs (and merge them later).\n            totalUIDs[i] = res.uids;\n            unchecked {\n                totalUIDCount += res.uids.length;\n            }\n        }\n\n        // Merge all the collected UIDs and return them as a flatten array.\n        return _mergeUIDs(totalUIDs, totalUIDCount);\n    }\n\n    /// @inheritdoc IEAS\n    function multiAttestByDelegation(\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\n    ) external payable returns (bytes32[] memory) {\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\n        // all the returned UIDs into a single list.\n        uint256 length = multiDelegatedRequests.length;\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\n        uint256 totalUIDCount = 0;\n\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n        // possible to send too much ETH anyway.\n        uint256 availableValue = msg.value;\n\n        for (uint256 i = 0; i < length; ++i) {\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n            // last and final batch).\n            bool last;\n            unchecked {\n                last = i == length - 1;\n            }\n\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\n\n            // Ensure that no inputs are missing.\n            uint256 dataLength = data.length;\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n                revert InvalidLength();\n            }\n\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n            for (uint256 j = 0; j < dataLength; ++j) {\n                _verifyAttest(\n                    DelegatedAttestationRequest({\n                        schema: multiDelegatedRequest.schema,\n                        data: data[j],\n                        signature: multiDelegatedRequest.signatures[j],\n                        attester: multiDelegatedRequest.attester,\n                        deadline: multiDelegatedRequest.deadline\n                    })\n                );\n            }\n\n            // Process the current batch of attestations.\n            AttestationsResult memory res = _attest(\n                multiDelegatedRequest.schema,\n                data,\n                multiDelegatedRequest.attester,\n                availableValue,\n                last\n            );\n\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n            availableValue -= res.usedValue;\n\n            // Collect UIDs (and merge them later).\n            totalUIDs[i] = res.uids;\n            unchecked {\n                totalUIDCount += res.uids.length;\n            }\n        }\n\n        // Merge all the collected UIDs and return them as a flatten array.\n        return _mergeUIDs(totalUIDs, totalUIDCount);\n    }\n\n    /// @inheritdoc IEAS\n    function revoke(RevocationRequest calldata request) external payable {\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\n        data[0] = request.data;\n\n        _revoke(request.schema, data, msg.sender, msg.value, true);\n    }\n\n    /// @inheritdoc IEAS\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\n        _verifyRevoke(delegatedRequest);\n\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\n        data[0] = delegatedRequest.data;\n\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\n    }\n\n    /// @inheritdoc IEAS\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n        // possible to send too much ETH anyway.\n        uint256 availableValue = msg.value;\n\n        uint256 length = multiRequests.length;\n        for (uint256 i = 0; i < length; ++i) {\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n            // last and final batch).\n            bool last;\n            unchecked {\n                last = i == length - 1;\n            }\n\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\n\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\n        }\n    }\n\n    /// @inheritdoc IEAS\n    function multiRevokeByDelegation(\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\n    ) external payable {\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n        // possible to send too much ETH anyway.\n        uint256 availableValue = msg.value;\n\n        uint256 length = multiDelegatedRequests.length;\n        for (uint256 i = 0; i < length; ++i) {\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n            // last and final batch).\n            bool last;\n            unchecked {\n                last = i == length - 1;\n            }\n\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\n\n            // Ensure that no inputs are missing.\n            uint256 dataLength = data.length;\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n                revert InvalidLength();\n            }\n\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n            for (uint256 j = 0; j < dataLength; ++j) {\n                _verifyRevoke(\n                    DelegatedRevocationRequest({\n                        schema: multiDelegatedRequest.schema,\n                        data: data[j],\n                        signature: multiDelegatedRequest.signatures[j],\n                        revoker: multiDelegatedRequest.revoker,\n                        deadline: multiDelegatedRequest.deadline\n                    })\n                );\n            }\n\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n            availableValue -= _revoke(\n                multiDelegatedRequest.schema,\n                data,\n                multiDelegatedRequest.revoker,\n                availableValue,\n                last\n            );\n        }\n    }\n\n    /// @inheritdoc IEAS\n    function timestamp(bytes32 data) external returns (uint64) {\n        uint64 time = _time();\n\n        _timestamp(data, time);\n\n        return time;\n    }\n\n    /// @inheritdoc IEAS\n    function revokeOffchain(bytes32 data) external returns (uint64) {\n        uint64 time = _time();\n\n        _revokeOffchain(msg.sender, data, time);\n\n        return time;\n    }\n\n    /// @inheritdoc IEAS\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\n        uint64 time = _time();\n\n        uint256 length = data.length;\n        for (uint256 i = 0; i < length; ++i) {\n            _revokeOffchain(msg.sender, data[i], time);\n        }\n\n        return time;\n    }\n\n    /// @inheritdoc IEAS\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\n        uint64 time = _time();\n\n        uint256 length = data.length;\n        for (uint256 i = 0; i < length; ++i) {\n            _timestamp(data[i], time);\n        }\n\n        return time;\n    }\n\n    /// @inheritdoc IEAS\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\n        return _db[uid];\n    }\n\n    /// @inheritdoc IEAS\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\n        return _db[uid].uid != EMPTY_UID;\n    }\n\n    /// @inheritdoc IEAS\n    function getTimestamp(bytes32 data) external view returns (uint64) {\n        return _timestamps[data];\n    }\n\n    /// @inheritdoc IEAS\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\n        return _revocationsOffchain[revoker][data];\n    }\n\n    /// @dev Attests to a specific schema.\n    /// @param schemaUID The unique identifier of the schema to attest to.\n    /// @param data The arguments of the attestation requests.\n    /// @param attester The attesting account.\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\n    /// @param last Whether this is the last attestations/revocations set.\n    /// @return The UID of the new attestations and the total sent ETH amount.\n    function _attest(\n        bytes32 schemaUID,\n        AttestationRequestData[] memory data,\n        address attester,\n        uint256 availableValue,\n        bool last\n    ) private returns (AttestationsResult memory) {\n        uint256 length = data.length;\n\n        AttestationsResult memory res;\n        res.uids = new bytes32[](length);\n\n        // Ensure that we aren't attempting to attest to a non-existing schema.\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\n        if (schemaRecord.uid == EMPTY_UID) {\n            revert InvalidSchema();\n        }\n\n        Attestation[] memory attestations = new Attestation[](length);\n        uint256[] memory values = new uint256[](length);\n\n        for (uint256 i = 0; i < length; ++i) {\n            AttestationRequestData memory request = data[i];\n\n            // Ensure that either no expiration time was set or that it was set in the future.\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\n                revert InvalidExpirationTime();\n            }\n\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\n            if (!schemaRecord.revocable && request.revocable) {\n                revert Irrevocable();\n            }\n\n            Attestation memory attestation = Attestation({\n                uid: EMPTY_UID,\n                schema: schemaUID,\n                refUID: request.refUID,\n                time: _time(),\n                expirationTime: request.expirationTime,\n                revocationTime: 0,\n                recipient: request.recipient,\n                attester: attester,\n                revocable: request.revocable,\n                data: request.data\n            });\n\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\n            bytes32 uid;\n            uint32 bump = 0;\n            while (true) {\n                uid = _getUID(attestation, bump);\n                if (_db[uid].uid == EMPTY_UID) {\n                    break;\n                }\n\n                unchecked {\n                    ++bump;\n                }\n            }\n            attestation.uid = uid;\n\n            _db[uid] = attestation;\n\n            if (request.refUID != EMPTY_UID) {\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\n                if (!isAttestationValid(request.refUID)) {\n                    revert NotFound();\n                }\n            }\n\n            attestations[i] = attestation;\n            values[i] = request.value;\n\n            res.uids[i] = uid;\n\n            emit Attested(request.recipient, attester, uid, schemaUID);\n        }\n\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\n\n        return res;\n    }\n\n    /// @dev Revokes an existing attestation to a specific schema.\n    /// @param schemaUID The unique identifier of the schema to attest to.\n    /// @param data The arguments of the revocation requests.\n    /// @param revoker The revoking account.\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\n    /// @param last Whether this is the last attestations/revocations set.\n    /// @return Returns the total sent ETH amount.\n    function _revoke(\n        bytes32 schemaUID,\n        RevocationRequestData[] memory data,\n        address revoker,\n        uint256 availableValue,\n        bool last\n    ) private returns (uint256) {\n        // Ensure that a non-existing schema ID wasn't passed by accident.\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\n        if (schemaRecord.uid == EMPTY_UID) {\n            revert InvalidSchema();\n        }\n\n        uint256 length = data.length;\n        Attestation[] memory attestations = new Attestation[](length);\n        uint256[] memory values = new uint256[](length);\n\n        for (uint256 i = 0; i < length; ++i) {\n            RevocationRequestData memory request = data[i];\n\n            Attestation storage attestation = _db[request.uid];\n\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\n            if (attestation.uid == EMPTY_UID) {\n                revert NotFound();\n            }\n\n            // Ensure that a wrong schema ID wasn't passed by accident.\n            if (attestation.schema != schemaUID) {\n                revert InvalidSchema();\n            }\n\n            // Allow only original attesters to revoke their attestations.\n            if (attestation.attester != revoker) {\n                revert AccessDenied();\n            }\n\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\n            // make revocable attestations to an irrevocable schema.\n            if (!attestation.revocable) {\n                revert Irrevocable();\n            }\n\n            // Ensure that we aren't trying to revoke the same attestation twice.\n            if (attestation.revocationTime != 0) {\n                revert AlreadyRevoked();\n            }\n            attestation.revocationTime = _time();\n\n            attestations[i] = attestation;\n            values[i] = request.value;\n\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\n        }\n\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\n    }\n\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\n    /// @param schemaRecord The schema of the attestation.\n    /// @param attestation The data of the attestation to make/revoke.\n    /// @param value An explicit ETH amount to send to the resolver.\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\n    /// @param last Whether this is the last attestations/revocations set.\n    /// @return Returns the total sent ETH amount.\n    function _resolveAttestation(\n        SchemaRecord memory schemaRecord,\n        Attestation memory attestation,\n        uint256 value,\n        bool isRevocation,\n        uint256 availableValue,\n        bool last\n    ) private returns (uint256) {\n        ISchemaResolver resolver = schemaRecord.resolver;\n        if (address(resolver) == address(0)) {\n            // Ensure that we don't accept payments if there is no resolver.\n            if (value != 0) {\n                revert NotPayable();\n            }\n\n            if (last) {\n                _refund(availableValue);\n            }\n\n            return 0;\n        }\n\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\n        if (value != 0) {\n            if (!resolver.isPayable()) {\n                revert NotPayable();\n            }\n\n            // Ensure that the attester/revoker doesn't try to spend more than available.\n            if (value > availableValue) {\n                revert InsufficientValue();\n            }\n\n            // Ensure to deduct the sent value explicitly.\n            unchecked {\n                availableValue -= value;\n            }\n        }\n\n        if (isRevocation) {\n            if (!resolver.revoke{ value: value }(attestation)) {\n                revert InvalidRevocation();\n            }\n        } else if (!resolver.attest{ value: value }(attestation)) {\n            revert InvalidAttestation();\n        }\n\n        if (last) {\n            _refund(availableValue);\n        }\n\n        return value;\n    }\n\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\n    /// @param schemaRecord The schema of the attestation.\n    /// @param attestations The data of the attestations to make/revoke.\n    /// @param values Explicit ETH amounts to send to the resolver.\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\n    /// @param last Whether this is the last attestations/revocations set.\n    /// @return Returns the total sent ETH amount.\n    function _resolveAttestations(\n        SchemaRecord memory schemaRecord,\n        Attestation[] memory attestations,\n        uint256[] memory values,\n        bool isRevocation,\n        uint256 availableValue,\n        bool last\n    ) private returns (uint256) {\n        uint256 length = attestations.length;\n        if (length == 1) {\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\n        }\n\n        ISchemaResolver resolver = schemaRecord.resolver;\n        if (address(resolver) == address(0)) {\n            // Ensure that we don't accept payments if there is no resolver.\n            for (uint256 i = 0; i < length; ++i) {\n                if (values[i] != 0) {\n                    revert NotPayable();\n                }\n            }\n\n            if (last) {\n                _refund(availableValue);\n            }\n\n            return 0;\n        }\n\n        uint256 totalUsedValue = 0;\n        bool isResolverPayable = resolver.isPayable();\n\n        for (uint256 i = 0; i < length; ++i) {\n            uint256 value = values[i];\n\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\n            if (value == 0) {\n                continue;\n            }\n\n            if (!isResolverPayable) {\n                revert NotPayable();\n            }\n\n            // Ensure that the attester/revoker doesn't try to spend more than available.\n            if (value > availableValue) {\n                revert InsufficientValue();\n            }\n\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\n            unchecked {\n                availableValue -= value;\n                totalUsedValue += value;\n            }\n        }\n\n        if (isRevocation) {\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\n                revert InvalidRevocations();\n            }\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\n            revert InvalidAttestations();\n        }\n\n        if (last) {\n            _refund(availableValue);\n        }\n\n        return totalUsedValue;\n    }\n\n    /// @dev Calculates a UID for a given attestation.\n    /// @param attestation The input attestation.\n    /// @param bump A bump value to use in case of a UID conflict.\n    /// @return Attestation UID.\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\n        return\n            keccak256(\n                abi.encodePacked(\n                    attestation.schema,\n                    attestation.recipient,\n                    attestation.attester,\n                    attestation.time,\n                    attestation.expirationTime,\n                    attestation.revocable,\n                    attestation.refUID,\n                    attestation.data,\n                    bump\n                )\n            );\n    }\n\n    /// @dev Refunds remaining ETH amount to the attester.\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\n    function _refund(uint256 remainingValue) private {\n        if (remainingValue > 0) {\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\n            // apply for.\n            payable(msg.sender).sendValue(remainingValue);\n        }\n    }\n\n    /// @dev Timestamps the specified bytes32 data.\n    /// @param data The data to timestamp.\n    /// @param time The timestamp.\n    function _timestamp(bytes32 data, uint64 time) private {\n        if (_timestamps[data] != 0) {\n            revert AlreadyTimestamped();\n        }\n\n        _timestamps[data] = time;\n\n        emit Timestamped(data, time);\n    }\n\n    /// @dev Revokes the specified bytes32 data.\n    /// @param revoker The revoking account.\n    /// @param data The data to revoke.\n    /// @param time The timestamp the data was revoked with.\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\n\n        if (revocations[data] != 0) {\n            revert AlreadyRevokedOffchain();\n        }\n\n        revocations[data] = time;\n\n        emit RevokedOffchain(revoker, data, time);\n    }\n\n    /// @dev Merges lists of UIDs.\n    /// @param uidLists The provided lists of UIDs.\n    /// @param uidCount Total UID count.\n    /// @return A merged and flatten list of all the UIDs.\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\n        bytes32[] memory uids = new bytes32[](uidCount);\n\n        uint256 currentIndex = 0;\n        uint256 uidListLength = uidLists.length;\n        for (uint256 i = 0; i < uidListLength; ++i) {\n            bytes32[] memory currentUIDs = uidLists[i];\n            uint256 currentUIDsLength = currentUIDs.length;\n            for (uint256 j = 0; j < currentUIDsLength; ++j) {\n                uids[currentIndex] = currentUIDs[j];\n\n                unchecked {\n                    ++currentIndex;\n                }\n            }\n        }\n\n        return uids;\n    }\n}\n"
  },
  {
    "path": "contracts/IEAS.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { ISchemaRegistry } from \"./ISchemaRegistry.sol\";\nimport { ISemver } from \"./ISemver.sol\";\nimport { Attestation, Signature } from \"./Common.sol\";\n\n/// @notice A struct representing the arguments of the attestation request.\nstruct AttestationRequestData {\n    address recipient; // The recipient of the attestation.\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\n    bool revocable; // Whether the attestation is revocable.\n    bytes32 refUID; // The UID of the related attestation.\n    bytes data; // Custom attestation data.\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\n}\n\n/// @notice A struct representing the full arguments of the attestation request.\nstruct AttestationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    AttestationRequestData data; // The arguments of the attestation request.\n}\n\n/// @notice A struct representing the full arguments of the full delegated attestation request.\nstruct DelegatedAttestationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    AttestationRequestData data; // The arguments of the attestation request.\n    Signature signature; // The ECDSA signature data.\n    address attester; // The attesting account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the multi attestation request.\nstruct MultiAttestationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    AttestationRequestData[] data; // The arguments of the attestation request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\nstruct MultiDelegatedAttestationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    AttestationRequestData[] data; // The arguments of the attestation requests.\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n    address attester; // The attesting account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the arguments of the revocation request.\nstruct RevocationRequestData {\n    bytes32 uid; // The UID of the attestation to revoke.\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\n}\n\n/// @notice A struct representing the full arguments of the revocation request.\nstruct RevocationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    RevocationRequestData data; // The arguments of the revocation request.\n}\n\n/// @notice A struct representing the arguments of the full delegated revocation request.\nstruct DelegatedRevocationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    RevocationRequestData data; // The arguments of the revocation request.\n    Signature signature; // The ECDSA signature data.\n    address revoker; // The revoking account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the multi revocation request.\nstruct MultiRevocationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    RevocationRequestData[] data; // The arguments of the revocation request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\nstruct MultiDelegatedRevocationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    RevocationRequestData[] data; // The arguments of the revocation requests.\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n    address revoker; // The revoking account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @title IEAS\n/// @notice EAS - Ethereum Attestation Service interface.\ninterface IEAS is ISemver {\n    /// @notice Emitted when an attestation has been made.\n    /// @param recipient The recipient of the attestation.\n    /// @param attester The attesting account.\n    /// @param uid The UID of the new attestation.\n    /// @param schemaUID The UID of the schema.\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\n\n    /// @notice Emitted when an attestation has been revoked.\n    /// @param recipient The recipient of the attestation.\n    /// @param attester The attesting account.\n    /// @param schemaUID The UID of the schema.\n    /// @param uid The UID the revoked attestation.\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\n\n    /// @notice Emitted when a data has been timestamped.\n    /// @param data The data.\n    /// @param timestamp The timestamp.\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\n\n    /// @notice Emitted when a data has been revoked.\n    /// @param revoker The address of the revoker.\n    /// @param data The data.\n    /// @param timestamp The timestamp.\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\n\n    /// @notice Returns the address of the global schema registry.\n    /// @return The address of the global schema registry.\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\n\n    /// @notice Attests to a specific schema.\n    /// @param request The arguments of the attestation request.\n    /// @return The UID of the new attestation.\n    ///\n    /// Example:\n    ///     attest({\n    ///         schema: \"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\",\n    ///         data: {\n    ///             recipient: \"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\",\n    ///             expirationTime: 0,\n    ///             revocable: true,\n    ///             refUID: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n    ///             data: \"0xF00D\",\n    ///             value: 0\n    ///         }\n    ///     })\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\n\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\n    /// @param delegatedRequest The arguments of the delegated attestation request.\n    /// @return The UID of the new attestation.\n    ///\n    /// Example:\n    ///     attestByDelegation({\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: {\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n    ///             expirationTime: 1673891048,\n    ///             revocable: true,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x1234',\n    ///             value: 0\n    ///         },\n    ///         signature: {\n    ///             v: 28,\n    ///             r: '0x148c...b25b',\n    ///             s: '0x5a72...be22'\n    ///         },\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\n    ///         deadline: 1673891048\n    ///     })\n    function attestByDelegation(\n        DelegatedAttestationRequest calldata delegatedRequest\n    ) external payable returns (bytes32);\n\n    /// @notice Attests to multiple schemas.\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\n    ///     schema ids to benefit from the best batching optimization.\n    /// @return The UIDs of the new attestations.\n    ///\n    /// Example:\n    ///     multiAttest([{\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\n    ///         data: [{\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n    ///             expirationTime: 1673891048,\n    ///             revocable: true,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x1234',\n    ///             value: 1000\n    ///         },\n    ///         {\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n    ///             expirationTime: 0,\n    ///             revocable: false,\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\n    ///             data: '0x00',\n    ///             value: 0\n    ///         }],\n    ///     },\n    ///     {\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\n    ///         data: [{\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n    ///             expirationTime: 0,\n    ///             revocable: true,\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\n    ///             data: '0x12345678',\n    ///             value: 0\n    ///         },\n    ///     }])\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\n\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\n    /// @return The UIDs of the new attestations.\n    ///\n    /// Example:\n    ///     multiAttestByDelegation([{\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: [{\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n    ///             expirationTime: 1673891048,\n    ///             revocable: true,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x1234',\n    ///             value: 0\n    ///         },\n    ///         {\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n    ///             expirationTime: 0,\n    ///             revocable: false,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x00',\n    ///             value: 0\n    ///         }],\n    ///         signatures: [{\n    ///             v: 28,\n    ///             r: '0x148c...b25b',\n    ///             s: '0x5a72...be22'\n    ///         },\n    ///         {\n    ///             v: 28,\n    ///             r: '0x487s...67bb',\n    ///             s: '0x12ad...2366'\n    ///         }],\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\n    ///         deadline: 1673891048\n    ///     }])\n    function multiAttestByDelegation(\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\n    ) external payable returns (bytes32[] memory);\n\n    /// @notice Revokes an existing attestation to a specific schema.\n    /// @param request The arguments of the revocation request.\n    ///\n    /// Example:\n    ///     revoke({\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: {\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\n    ///             value: 0\n    ///         }\n    ///     })\n    function revoke(RevocationRequest calldata request) external payable;\n\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\n    /// @param delegatedRequest The arguments of the delegated revocation request.\n    ///\n    /// Example:\n    ///     revokeByDelegation({\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: {\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\n    ///             value: 0\n    ///         },\n    ///         signature: {\n    ///             v: 27,\n    ///             r: '0xb593...7142',\n    ///             s: '0x0f5b...2cce'\n    ///         },\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n    ///         deadline: 1673891048\n    ///     })\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\n\n    /// @notice Revokes existing attestations to multiple schemas.\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\n    ///     schema ids to benefit from the best batching optimization.\n    ///\n    /// Example:\n    ///     multiRevoke([{\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: [{\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\n    ///             value: 1000\n    ///         },\n    ///         {\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\n    ///             value: 0\n    ///         }],\n    ///     },\n    ///     {\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\n    ///         data: [{\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\n    ///             value: 0\n    ///         },\n    ///     }])\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\n\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\n    ///\n    /// Example:\n    ///     multiRevokeByDelegation([{\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: [{\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\n    ///             value: 1000\n    ///         },\n    ///         {\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\n    ///             value: 0\n    ///         }],\n    ///         signatures: [{\n    ///             v: 28,\n    ///             r: '0x148c...b25b',\n    ///             s: '0x5a72...be22'\n    ///         },\n    ///         {\n    ///             v: 28,\n    ///             r: '0x487s...67bb',\n    ///             s: '0x12ad...2366'\n    ///         }],\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n    ///         deadline: 1673891048\n    ///     }])\n    function multiRevokeByDelegation(\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\n    ) external payable;\n\n    /// @notice Timestamps the specified bytes32 data.\n    /// @param data The data to timestamp.\n    /// @return The timestamp the data was timestamped with.\n    function timestamp(bytes32 data) external returns (uint64);\n\n    /// @notice Timestamps the specified multiple bytes32 data.\n    /// @param data The data to timestamp.\n    /// @return The timestamp the data was timestamped with.\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\n\n    /// @notice Revokes the specified bytes32 data.\n    /// @param data The data to timestamp.\n    /// @return The timestamp the data was revoked with.\n    function revokeOffchain(bytes32 data) external returns (uint64);\n\n    /// @notice Revokes the specified multiple bytes32 data.\n    /// @param data The data to timestamp.\n    /// @return The timestamp the data was revoked with.\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\n\n    /// @notice Returns an existing attestation by UID.\n    /// @param uid The UID of the attestation to retrieve.\n    /// @return The attestation data members.\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\n\n    /// @notice Checks whether an attestation exists.\n    /// @param uid The UID of the attestation to retrieve.\n    /// @return Whether an attestation exists.\n    function isAttestationValid(bytes32 uid) external view returns (bool);\n\n    /// @notice Returns the timestamp that the specified data was timestamped with.\n    /// @param data The data to query.\n    /// @return The timestamp the data was timestamped with.\n    function getTimestamp(bytes32 data) external view returns (uint64);\n\n    /// @notice Returns the timestamp that the specified data was timestamped with.\n    /// @param data The data to query.\n    /// @return The timestamp the data was timestamped with.\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\n}\n"
  },
  {
    "path": "contracts/ISchemaRegistry.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { ISemver } from \"./ISemver.sol\";\n\nimport { ISchemaResolver } from \"./resolver/ISchemaResolver.sol\";\n\n/// @notice A struct representing a record for a submitted schema.\nstruct SchemaRecord {\n    bytes32 uid; // The unique identifier of the schema.\n    ISchemaResolver resolver; // Optional schema resolver.\n    bool revocable; // Whether the schema allows revocations explicitly.\n    string schema; // Custom specification of the schema (e.g., an ABI).\n}\n\n/// @title ISchemaRegistry\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\ninterface ISchemaRegistry is ISemver {\n    /// @notice Emitted when a new schema has been registered\n    /// @param uid The schema UID.\n    /// @param registerer The address of the account used to register the schema.\n    /// @param schema The schema data.\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\n\n    /// @notice Submits and reserves a new schema\n    /// @param schema The schema data schema.\n    /// @param resolver An optional schema resolver.\n    /// @param revocable Whether the schema allows revocations explicitly.\n    /// @return The UID of the new schema.\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\n\n    /// @notice Returns an existing schema by UID\n    /// @param uid The UID of the schema to retrieve.\n    /// @return The schema data members.\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\n}\n"
  },
  {
    "path": "contracts/ISemver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @title ISemver\n/// @notice A semver interface.\ninterface ISemver {\n    /// @notice Returns the full semver contract version.\n    /// @return Semver contract version as a string.\n    function version() external view returns (string memory);\n}\n"
  },
  {
    "path": "contracts/Indexer.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { IEAS, Attestation } from \"./IEAS.sol\";\nimport { EMPTY_UID } from \"./Common.sol\";\nimport { Semver } from \"./Semver.sol\";\n\n/// @title Indexer\n/// @notice Indexing Service for the Ethereum Attestation Service\ncontract Indexer is Semver {\n    error InvalidEAS();\n    error InvalidAttestation();\n    error InvalidOffset();\n\n    /// @notice Emitted when an attestation has been indexed.\n    /// @param uid The UID the attestation.\n    event Indexed(bytes32 indexed uid);\n\n    /// A mapping between an account and its received attestations.\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\n\n    // A mapping between an account and its sent attestations.\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\n\n    // A mapping between a schema, attester, and recipient.\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\n        private _schemaAttesterRecipientAttestations;\n\n    // A mapping between a schema and its attestations.\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\n\n    // The global mapping of attestation indexing status.\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\n\n    // The address of the global EAS contract.\n    IEAS private immutable _eas;\n\n    /// @dev Creates a new Indexer instance.\n    /// @param eas The address of the global EAS contract.\n    constructor(IEAS eas) Semver(1, 4, 0) {\n        if (address(eas) == address(0)) {\n            revert InvalidEAS();\n        }\n\n        _eas = eas;\n    }\n\n    /// @notice Returns the EAS.\n    function getEAS() external view returns (IEAS) {\n        return _eas;\n    }\n\n    /// @notice Indexes an existing attestation.\n    /// @param attestationUID The UID of the attestation to index.\n    function indexAttestation(bytes32 attestationUID) external {\n        _indexAttestation(attestationUID);\n    }\n\n    /// @notice Indexes multiple existing attestations.\n    /// @param attestationUIDs The UIDs of the attestations to index.\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\n        uint256 length = attestationUIDs.length;\n        for (uint256 i = 0; i < length; ++i) {\n            _indexAttestation(attestationUIDs[i]);\n        }\n    }\n\n    /// @notice Returns whether an existing attestation has been already indexed.\n    /// @param attestationUID The UID of the attestation to check.\n    /// @return Whether an attestation has been already indexed.\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\n        return _indexedAttestations[attestationUID];\n    }\n\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\n    ///     recipient.\n    /// @param recipient The recipient of the attestation.\n    /// @param schemaUID The UID of the schema.\n    /// @param start The offset to start from.\n    /// @param length The number of total members to retrieve.\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n    /// @return An array of attestation UIDs.\n    function getReceivedAttestationUIDs(\n        address recipient,\n        bytes32 schemaUID,\n        uint256 start,\n        uint256 length,\n        bool reverseOrder\n    ) external view returns (bytes32[] memory) {\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\n    }\n\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\n    ///     specific recipient.\n    /// @param recipient The recipient of the attestation.\n    /// @param schemaUID The UID of the schema.\n    /// @return The total number of attestations.\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\n        return _receivedAttestations[recipient][schemaUID].length;\n    }\n\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\n    /// @param attester The attester of the attestation.\n    /// @param schemaUID The UID of the schema.\n    /// @param start The offset to start from.\n    /// @param length The number of total members to retrieve.\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n    /// @return An array of attestation UIDs.\n    function getSentAttestationUIDs(\n        address attester,\n        bytes32 schemaUID,\n        uint256 start,\n        uint256 length,\n        bool reverseOrder\n    ) external view returns (bytes32[] memory) {\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\n    }\n\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\n    /// attester.\n    /// @param attester The attester of the attestation.\n    /// @param schemaUID The UID of the schema.\n    /// @return The total number of attestations.\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\n        return _sentAttestations[attester][schemaUID].length;\n    }\n\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\n    ///     specific recipient.\n    /// @param schemaUID The UID of the schema.\n    /// @param attester The attester of the attestation.\n    /// @param recipient The recipient of the attestation.\n    /// @param start The offset to start from.\n    /// @param length The number of total members to retrieve.\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n    /// @return An array of attestation UIDs.\n    function getSchemaAttesterRecipientAttestationUIDs(\n        bytes32 schemaUID,\n        address attester,\n        address recipient,\n        uint256 start,\n        uint256 length,\n        bool reverseOrder\n    ) external view returns (bytes32[] memory) {\n        return\n            _sliceUIDs(\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\n                start,\n                length,\n                reverseOrder\n            );\n    }\n\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\n    ///     attester to a specific recipient.\n    /// @param schemaUID The UID of the schema.\n    /// @param attester The attester of the attestation.\n    /// @param recipient The recipient of the attestation.\n    /// @return An array of attestation UIDs.\n    function getSchemaAttesterRecipientAttestationUIDCount(\n        bytes32 schemaUID,\n        address attester,\n        address recipient\n    ) external view returns (uint256) {\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\n    }\n\n    /// @notice Returns the UIDs of attestations to a specific schema.\n    /// @param schemaUID The UID of the schema.\n    /// @param start The offset to start from.\n    /// @param length The number of total members to retrieve.\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n    /// @return An array of attestation UIDs.\n    function getSchemaAttestationUIDs(\n        bytes32 schemaUID,\n        uint256 start,\n        uint256 length,\n        bool reverseOrder\n    ) external view returns (bytes32[] memory) {\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\n    }\n\n    /// @notice Returns the total number of attestations to a specific schema.\n    /// @param schemaUID The UID of the schema.\n    /// @return An array of attestation UIDs.\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\n        return _schemaAttestations[schemaUID].length;\n    }\n\n    /// @dev Indexes an existing attestation.\n    /// @param attestationUID The UID of the attestation to index.\n    function _indexAttestation(bytes32 attestationUID) private {\n        // Skip already indexed attestations.\n        if (_indexedAttestations[attestationUID]) {\n            return;\n        }\n\n        // Check if the attestation exists.\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\n\n        bytes32 uid = attestation.uid;\n        if (uid == EMPTY_UID) {\n            revert InvalidAttestation();\n        }\n\n        // Index the attestation.\n        address attester = attestation.attester;\n        address recipient = attestation.recipient;\n        bytes32 schemaUID = attestation.schema;\n\n        _indexedAttestations[attestationUID] = true;\n        _schemaAttestations[schemaUID].push(attestationUID);\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\n        _sentAttestations[attester][schemaUID].push(attestationUID);\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\n\n        emit Indexed({ uid: uid });\n    }\n\n    /// @dev Returns a slice in an array of attestation UIDs.\n    /// @param uids The array of attestation UIDs.\n    /// @param start The offset to start from.\n    /// @param length The number of total members to retrieve.\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n    /// @return An array of attestation UIDs.\n    function _sliceUIDs(\n        bytes32[] memory uids,\n        uint256 start,\n        uint256 length,\n        bool reverseOrder\n    ) private pure returns (bytes32[] memory) {\n        uint256 attestationsLength = uids.length;\n        if (attestationsLength == 0) {\n            return new bytes32[](0);\n        }\n\n        if (start >= attestationsLength) {\n            revert InvalidOffset();\n        }\n\n        unchecked {\n            uint256 len = length;\n            if (attestationsLength < start + length) {\n                len = attestationsLength - start;\n            }\n\n            bytes32[] memory res = new bytes32[](len);\n\n            for (uint256 i = 0; i < len; ++i) {\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\n            }\n\n            return res;\n        }\n    }\n}\n"
  },
  {
    "path": "contracts/SchemaRegistry.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { ISchemaResolver } from \"./resolver/ISchemaResolver.sol\";\n\nimport { EMPTY_UID } from \"./Common.sol\";\nimport { Semver } from \"./Semver.sol\";\nimport { ISchemaRegistry, SchemaRecord } from \"./ISchemaRegistry.sol\";\n\n/// @title SchemaRegistry\n/// @notice The global schema registry.\ncontract SchemaRegistry is ISchemaRegistry, Semver {\n    error AlreadyExists();\n\n    // The global mapping between schema records and their IDs.\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\n\n    /// @dev Creates a new SchemaRegistry instance.\n    constructor() Semver(1, 4, 0) {}\n\n    /// @inheritdoc ISchemaRegistry\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\n        SchemaRecord memory schemaRecord = SchemaRecord({\n            uid: EMPTY_UID,\n            schema: schema,\n            resolver: resolver,\n            revocable: revocable\n        });\n\n        bytes32 uid = _getUID(schemaRecord);\n        if (_registry[uid].uid != EMPTY_UID) {\n            revert AlreadyExists();\n        }\n\n        schemaRecord.uid = uid;\n        _registry[uid] = schemaRecord;\n\n        emit Registered(uid, msg.sender, schemaRecord);\n\n        return uid;\n    }\n\n    /// @inheritdoc ISchemaRegistry\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\n        return _registry[uid];\n    }\n\n    /// @dev Calculates a UID for a given schema.\n    /// @param schemaRecord The input schema.\n    /// @return schema UID.\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\n    }\n}\n"
  },
  {
    "path": "contracts/Semver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.4;\n\nimport { Strings } from \"@openzeppelin/contracts/utils/Strings.sol\";\n\nimport { ISemver } from \"./ISemver.sol\";\n\n/// @title Semver\n/// @notice A simple contract for managing contract versions.\ncontract Semver is ISemver {\n    // Contract's major version number.\n    uint256 private immutable _major;\n\n    // Contract's minor version number.\n    uint256 private immutable _minor;\n\n    // Contract's patch version number.\n    uint256 private immutable _patch;\n\n    /// @dev Create a new Semver instance.\n    /// @param major Major version number.\n    /// @param minor Minor version number.\n    /// @param patch Patch version number.\n    constructor(uint256 major, uint256 minor, uint256 patch) {\n        _major = major;\n        _minor = minor;\n        _patch = patch;\n    }\n\n    /// @notice Returns the full semver contract version.\n    /// @return Semver contract version as a string.\n    function version() external view returns (string memory) {\n        return\n            string(\n                abi.encodePacked(Strings.toString(_major), \".\", Strings.toString(_minor), \".\", Strings.toString(_patch))\n            );\n    }\n}\n"
  },
  {
    "path": "contracts/eip1271/EIP1271Verifier.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \"./../Common.sol\";\n\n// prettier-ignore\nimport {\n    AttestationRequestData,\n    DelegatedAttestationRequest,\n    DelegatedRevocationRequest,\n    RevocationRequestData\n} from \"../IEAS.sol\";\n\n/// @title EIP1271Verifier\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\nabstract contract EIP1271Verifier is EIP712 {\n    using Address for address;\n\n    error InvalidNonce();\n\n    // The hash of the data type used to relay calls to the attest function. It's the value of\n    // keccak256(\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\").\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\n\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\n    // keccak256(\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\").\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\n\n    // The user readable name of the signing domain.\n    string private _name;\n\n    // Replay protection nonces.\n    mapping(address attester => uint256 nonce) private _nonces;\n\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\n    /// @param oldNonce The previous nonce.\n    /// @param newNonce The new value.\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\n\n    /// @dev Creates a new EIP1271Verifier instance.\n    /// @param version The current major version of the signing domain\n    constructor(string memory name, string memory version) EIP712(name, version) {\n        _name = name;\n    }\n\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\n    function getDomainSeparator() external view returns (bytes32) {\n        return _domainSeparatorV4();\n    }\n\n    /// @notice Returns the current nonce per-account.\n    /// @param account The requested account.\n    /// @return The current nonce.\n    function getNonce(address account) external view returns (uint256) {\n        return _nonces[account];\n    }\n\n    /// @notice Returns the EIP712 type hash for the attest function.\n    /// @return The EIP712 type hash for the attest function.\n    function getAttestTypeHash() external pure returns (bytes32) {\n        return ATTEST_TYPEHASH;\n    }\n\n    /// @notice Returns the EIP712 type hash for the revoke function.\n    /// @return The EIP712 type hash for the revoke function.\n    function getRevokeTypeHash() external pure returns (bytes32) {\n        return REVOKE_TYPEHASH;\n    }\n\n    /// @notice Returns the EIP712 name.\n    /// @return The EIP712 name.\n    function getName() external view returns (string memory) {\n        return _name;\n    }\n\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\n    /// @param newNonce The (higher) new value.\n    function increaseNonce(uint256 newNonce) external {\n        uint256 oldNonce = _nonces[msg.sender];\n        if (newNonce <= oldNonce) {\n            revert InvalidNonce();\n        }\n\n        _nonces[msg.sender] = newNonce;\n\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\n    }\n\n    /// @dev Verifies delegated attestation request.\n    /// @param request The arguments of the delegated attestation request.\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n            revert DeadlineExpired();\n        }\n\n        AttestationRequestData memory data = request.data;\n        Signature memory signature = request.signature;\n\n        bytes32 hash = _hashTypedDataV4(\n            keccak256(\n                abi.encode(\n                    ATTEST_TYPEHASH,\n                    request.attester,\n                    request.schema,\n                    data.recipient,\n                    data.expirationTime,\n                    data.revocable,\n                    data.refUID,\n                    keccak256(data.data),\n                    data.value,\n                    _nonces[request.attester]++,\n                    request.deadline\n                )\n            )\n        );\n        if (\n            !SignatureChecker.isValidSignatureNow(\n                request.attester,\n                hash,\n                abi.encodePacked(signature.r, signature.s, signature.v)\n            )\n        ) {\n            revert InvalidSignature();\n        }\n    }\n\n    /// @dev Verifies delegated revocation request.\n    /// @param request The arguments of the delegated revocation request.\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n            revert DeadlineExpired();\n        }\n\n        RevocationRequestData memory data = request.data;\n        Signature memory signature = request.signature;\n\n        bytes32 hash = _hashTypedDataV4(\n            keccak256(\n                abi.encode(\n                    REVOKE_TYPEHASH,\n                    request.revoker,\n                    request.schema,\n                    data.uid,\n                    data.value,\n                    _nonces[request.revoker]++,\n                    request.deadline\n                )\n            )\n        );\n        if (\n            !SignatureChecker.isValidSignatureNow(\n                request.revoker,\n                hash,\n                abi.encodePacked(signature.r, signature.s, signature.v)\n            )\n        ) {\n            revert InvalidSignature();\n        }\n    }\n\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\n    ///     current block time.\n    function _time() internal view virtual returns (uint64) {\n        return uint64(block.timestamp);\n    }\n}\n"
  },
  {
    "path": "contracts/eip712/proxy/EIP712Proxy.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\n\n// prettier-ignore\nimport {\n    AccessDenied,\n    DeadlineExpired,\n    Signature,\n    InvalidEAS,\n    InvalidLength,\n    InvalidSignature,\n    NotFound,\n    NO_EXPIRATION_TIME\n} from \"../../Common.sol\";\n\n// prettier-ignore\nimport {\n    AttestationRequest,\n    AttestationRequestData,\n    IEAS,\n    MultiAttestationRequest,\n    MultiRevocationRequest,\n    RevocationRequest,\n    RevocationRequestData\n} from \"../../IEAS.sol\";\n\nimport { Semver } from \"../../Semver.sol\";\n\n/// @notice A struct representing the full arguments of the full delegated attestation request.\nstruct DelegatedProxyAttestationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    AttestationRequestData data; // The arguments of the attestation request.\n    Signature signature; // The EIP712 signature data.\n    address attester; // The attesting account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\nstruct MultiDelegatedProxyAttestationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    AttestationRequestData[] data; // The arguments of the attestation requests.\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n    address attester; // The attesting account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the arguments of the full delegated revocation request.\nstruct DelegatedProxyRevocationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    RevocationRequestData data; // The arguments of the revocation request.\n    Signature signature; // The EIP712 signature data.\n    address revoker; // The revoking account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\nstruct MultiDelegatedProxyRevocationRequest {\n    bytes32 schema; // The unique identifier of the schema.\n    RevocationRequestData[] data; // The arguments of the revocation requests.\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n    address revoker; // The revoking account.\n    uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @title EIP712Proxy\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\n///     signatures.\ncontract EIP712Proxy is Semver, EIP712 {\n    error UsedSignature();\n\n    // The hash of the data type used to relay calls to the attest function. It's the value of\n    // keccak256(\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\").\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\n\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\n    // keccak256(\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\").\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\n\n    // The global EAS contract.\n    IEAS private immutable _eas;\n\n    // The user readable name of the signing domain.\n    string private _name;\n\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\n    // attester is able to revert attestations by proxy.\n    mapping(bytes32 uid => address attester) private _attesters;\n\n    // Replay protection signatures.\n    mapping(bytes signature => bool used) private _signatures;\n\n    /// @dev Creates a new EIP1271Verifier instance.\n    /// @param eas The address of the global EAS contract.\n    /// @param name The user readable name of the signing domain.\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \"1.4.0\") {\n        if (address(eas) == address(0)) {\n            revert InvalidEAS();\n        }\n\n        _eas = eas;\n        _name = name;\n    }\n\n    /// @notice Returns the EAS.\n    function getEAS() external view returns (IEAS) {\n        return _eas;\n    }\n\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\n    function getDomainSeparator() external view returns (bytes32) {\n        return _domainSeparatorV4();\n    }\n\n    /// Returns the EIP712 type hash for the attest function.\n    function getAttestTypeHash() external pure returns (bytes32) {\n        return ATTEST_PROXY_TYPEHASH;\n    }\n\n    /// Returns the EIP712 type hash for the revoke function.\n    function getRevokeTypeHash() external pure returns (bytes32) {\n        return REVOKE_PROXY_TYPEHASH;\n    }\n\n    /// Returns the EIP712 name.\n    function getName() external view returns (string memory) {\n        return _name;\n    }\n\n    /// Returns the attester for a given uid.\n    function getAttester(bytes32 uid) external view returns (address) {\n        return _attesters[uid];\n    }\n\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\n    /// @param delegatedRequest The arguments of the delegated attestation request.\n    /// @return The UID of the new attestation.\n    ///\n    /// Example:\n    ///     attestByDelegation({\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: {\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n    ///             expirationTime: 1673891048,\n    ///             revocable: true,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x1234',\n    ///             value: 0\n    ///         },\n    ///         signature: {\n    ///             v: 28,\n    ///             r: '0x148c...b25b',\n    ///             s: '0x5a72...be22'\n    ///         },\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\n    ///         deadline: 1673891048\n    ///     })\n    function attestByDelegation(\n        DelegatedProxyAttestationRequest calldata delegatedRequest\n    ) public payable virtual returns (bytes32) {\n        _verifyAttest(delegatedRequest);\n\n        bytes32 uid = _eas.attest{ value: msg.value }(\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\n        );\n\n        _attesters[uid] = delegatedRequest.attester;\n\n        return uid;\n    }\n\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\n    /// @return The UIDs of the new attestations.\n    ///\n    /// Example:\n    ///     multiAttestByDelegation([{\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: [{\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n    ///             expirationTime: 1673891048,\n    ///             revocable: true,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x1234',\n    ///             value: 0\n    ///         },\n    ///         {\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n    ///             expirationTime: 0,\n    ///             revocable: false,\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n    ///             data: '0x00',\n    ///             value: 0\n    ///         }],\n    ///         signatures: [{\n    ///             v: 28,\n    ///             r: '0x148c...b25b',\n    ///             s: '0x5a72...be22'\n    ///         },\n    ///         {\n    ///             v: 28,\n    ///             r: '0x487s...67bb',\n    ///             s: '0x12ad...2366'\n    ///         }],\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\n    ///         deadline: 1673891048\n    ///     }])\n    function multiAttestByDelegation(\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\n    ) public payable virtual returns (bytes32[] memory) {\n        uint256 length = multiDelegatedRequests.length;\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\n\n        for (uint256 i = 0; i < length; ++i) {\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\n\n            // Ensure that no inputs are missing.\n            uint256 dataLength = data.length;\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n                revert InvalidLength();\n            }\n\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n            for (uint256 j = 0; j < dataLength; ++j) {\n                _verifyAttest(\n                    DelegatedProxyAttestationRequest({\n                        schema: multiDelegatedRequest.schema,\n                        data: data[j],\n                        signature: multiDelegatedRequest.signatures[j],\n                        attester: multiDelegatedRequest.attester,\n                        deadline: multiDelegatedRequest.deadline\n                    })\n                );\n            }\n\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\n        }\n\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\n\n        // Store all attesters, according to the order of the attestation requests.\n        uint256 uidCounter = 0;\n\n        for (uint256 i = 0; i < length; ++i) {\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\n\n            uint256 dataLength = data.length;\n            for (uint256 j = 0; j < dataLength; ++j) {\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\n\n                unchecked {\n                    ++uidCounter;\n                }\n            }\n        }\n\n        return uids;\n    }\n\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\n    /// @param delegatedRequest The arguments of the delegated revocation request.\n    ///\n    /// Example:\n    ///     revokeByDelegation({\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: {\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\n    ///             value: 0\n    ///         },\n    ///         signature: {\n    ///             v: 27,\n    ///             r: '0xb593...7142',\n    ///             s: '0x0f5b...2cce'\n    ///         },\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n    ///         deadline: 1673891048\n    ///     })\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\n        _verifyRevoke(delegatedRequest);\n\n        return\n            _eas.revoke{ value: msg.value }(\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\n            );\n    }\n\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\n    ///\n    /// Example:\n    ///     multiRevokeByDelegation([{\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n    ///         data: [{\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\n    ///             value: 1000\n    ///         },\n    ///         {\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\n    ///             value: 0\n    ///         }],\n    ///         signatures: [{\n    ///             v: 28,\n    ///             r: '0x148c...b25b',\n    ///             s: '0x5a72...be22'\n    ///         },\n    ///         {\n    ///             v: 28,\n    ///             r: '0x487s...67bb',\n    ///             s: '0x12ad...2366'\n    ///         }],\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n    ///         deadline: 1673891048\n    ///     }])\n    function multiRevokeByDelegation(\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\n    ) public payable virtual {\n        uint256 length = multiDelegatedRequests.length;\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\n\n        for (uint256 i = 0; i < length; ++i) {\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\n\n            // Ensure that no inputs are missing.\n            uint256 dataLength = data.length;\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n                revert InvalidLength();\n            }\n\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n            for (uint256 j = 0; j < dataLength; ++j) {\n                RevocationRequestData memory requestData = data[j];\n\n                _verifyRevoke(\n                    DelegatedProxyRevocationRequest({\n                        schema: multiDelegatedRequest.schema,\n                        data: requestData,\n                        signature: multiDelegatedRequest.signatures[j],\n                        revoker: multiDelegatedRequest.revoker,\n                        deadline: multiDelegatedRequest.deadline\n                    })\n                );\n            }\n\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\n        }\n\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\n    }\n\n    /// @dev Verifies delegated attestation request.\n    /// @param request The arguments of the delegated attestation request.\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n            revert DeadlineExpired();\n        }\n\n        AttestationRequestData memory data = request.data;\n        Signature memory signature = request.signature;\n\n        _verifyUnusedSignature(signature);\n\n        bytes32 digest = _hashTypedDataV4(\n            keccak256(\n                abi.encode(\n                    ATTEST_PROXY_TYPEHASH,\n                    request.attester,\n                    request.schema,\n                    data.recipient,\n                    data.expirationTime,\n                    data.revocable,\n                    data.refUID,\n                    keccak256(data.data),\n                    data.value,\n                    request.deadline\n                )\n            )\n        );\n\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\n            revert InvalidSignature();\n        }\n    }\n\n    /// @dev Verifies delegated revocation request.\n    /// @param request The arguments of the delegated revocation request.\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n            revert DeadlineExpired();\n        }\n\n        RevocationRequestData memory data = request.data;\n\n        // Allow only original attesters to revoke their attestations.\n        address attester = _attesters[data.uid];\n        if (attester == address(0)) {\n            revert NotFound();\n        }\n\n        if (attester != request.revoker) {\n            revert AccessDenied();\n        }\n\n        Signature memory signature = request.signature;\n\n        _verifyUnusedSignature(signature);\n\n        bytes32 digest = _hashTypedDataV4(\n            keccak256(\n                abi.encode(\n                    REVOKE_PROXY_TYPEHASH,\n                    request.revoker,\n                    request.schema,\n                    data.uid,\n                    data.value,\n                    request.deadline\n                )\n            )\n        );\n\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\n            revert InvalidSignature();\n        }\n    }\n\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\n    /// @param signature The EIP712 signature data.\n    function _verifyUnusedSignature(Signature memory signature) internal {\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\n\n        if (_signatures[packedSignature]) {\n            revert UsedSignature();\n        }\n\n        _signatures[packedSignature] = true;\n    }\n\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\n    ///     current block time.\n    function _time() internal view virtual returns (uint64) {\n        return uint64(block.timestamp);\n    }\n}\n"
  },
  {
    "path": "contracts/eip712/proxy/examples/PermissionedEIP712Proxy.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { Ownable, Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\n// prettier-ignore\nimport {\n    EIP712Proxy,\n    DelegatedProxyAttestationRequest,\n    DelegatedProxyRevocationRequest,\n    MultiDelegatedProxyAttestationRequest,\n    MultiDelegatedProxyRevocationRequest\n} from \"../EIP712Proxy.sol\";\n\nimport { IEAS } from \"../../../IEAS.sol\";\n\nimport { AccessDenied } from \"../../../Common.sol\";\n\n/// @title PermissionedEIP712Proxy\n/// @notice A sample EIP712 proxy that allows only a specific address to attest.\ncontract PermissionedEIP712Proxy is EIP712Proxy, Ownable2Step {\n    /// @dev Creates a new PermissionedEIP712Proxy instance.\n    /// @param eas The address of the global EAS contract.\n    /// @param name The user readable name of the signing domain.\n    constructor(IEAS eas, string memory name) Ownable(msg.sender) EIP712Proxy(eas, name) {}\n\n    /// @inheritdoc EIP712Proxy\n    function attestByDelegation(\n        DelegatedProxyAttestationRequest calldata delegatedRequest\n    ) public payable override returns (bytes32) {\n        // Ensure that only the owner is allowed to delegate attestations.\n        _verifyAttester(delegatedRequest.attester);\n\n        return super.attestByDelegation(delegatedRequest);\n    }\n\n    /// @inheritdoc EIP712Proxy\n    function multiAttestByDelegation(\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\n    ) public payable override returns (bytes32[] memory) {\n        uint256 length = multiDelegatedRequests.length;\n        for (uint256 i = 0; i < length; ++i) {\n            // Ensure that only the owner is allowed to delegate attestations.\n            _verifyAttester(multiDelegatedRequests[i].attester);\n        }\n\n        return super.multiAttestByDelegation(multiDelegatedRequests);\n    }\n\n    /// @inheritdoc EIP712Proxy\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable override {\n        // Ensure that only the owner is allowed to delegate revocations.\n        _verifyAttester(delegatedRequest.revoker);\n\n        super.revokeByDelegation(delegatedRequest);\n    }\n\n    /// @inheritdoc EIP712Proxy\n    function multiRevokeByDelegation(\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\n    ) public payable override {\n        uint256 length = multiDelegatedRequests.length;\n        for (uint256 i = 0; i < length; ++i) {\n            // Ensure that only the owner is allowed to delegate revocations.\n            _verifyAttester(multiDelegatedRequests[i].revoker);\n        }\n\n        super.multiRevokeByDelegation(multiDelegatedRequests);\n    }\n\n    /// @dev Ensures that only the allowed attester can attest.\n    /// @param attester The attester to verify.\n    function _verifyAttester(address attester) private view {\n        if (attester != owner()) {\n            revert AccessDenied();\n        }\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/ISchemaResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { Attestation } from \"./../Common.sol\";\nimport { ISemver } from \"./../ISemver.sol\";\n\n/// @title ISchemaResolver\n/// @notice The interface of an optional schema resolver.\ninterface ISchemaResolver is ISemver {\n    /// @notice Checks if the resolver can be sent ETH.\n    /// @return Whether the resolver supports ETH transfers.\n    function isPayable() external pure returns (bool);\n\n    /// @notice Processes an attestation and verifies whether it's valid.\n    /// @param attestation The new attestation.\n    /// @return Whether the attestation is valid.\n    function attest(Attestation calldata attestation) external payable returns (bool);\n\n    /// @notice Processes multiple attestations and verifies whether they are valid.\n    /// @param attestations The new attestations.\n    /// @param values Explicit ETH amounts which were sent with each attestation.\n    /// @return Whether all the attestations are valid.\n    function multiAttest(\n        Attestation[] calldata attestations,\n        uint256[] calldata values\n    ) external payable returns (bool);\n\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\n    /// @param attestation The existing attestation to be revoked.\n    /// @return Whether the attestation can be revoked.\n    function revoke(Attestation calldata attestation) external payable returns (bool);\n\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\n    /// @param attestations The existing attestations to be revoked.\n    /// @param values Explicit ETH amounts which were sent with each revocation.\n    /// @return Whether the attestations can be revoked.\n    function multiRevoke(\n        Attestation[] calldata attestations,\n        uint256[] calldata values\n    ) external payable returns (bool);\n}\n"
  },
  {
    "path": "contracts/resolver/SchemaResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.4;\n\nimport { AccessDenied, InvalidEAS, InvalidLength } from \"./../Common.sol\";\nimport { IEAS, Attestation } from \"./../IEAS.sol\";\nimport { Semver } from \"./../Semver.sol\";\nimport { ISchemaResolver } from \"./ISchemaResolver.sol\";\n\n/// @title SchemaResolver\n/// @notice The base schema resolver contract.\nabstract contract SchemaResolver is ISchemaResolver, Semver {\n    error InsufficientValue();\n    error NotPayable();\n\n    // The global EAS contract.\n    IEAS internal immutable _eas;\n\n    /// @dev Creates a new resolver.\n    /// @param eas The address of the global EAS contract.\n    constructor(IEAS eas) Semver(1, 4, 0) {\n        if (address(eas) == address(0)) {\n            revert InvalidEAS();\n        }\n\n        _eas = eas;\n    }\n\n    /// @dev Ensures that only the EAS contract can make this call.\n    modifier onlyEAS() {\n        _onlyEAS();\n\n        _;\n    }\n\n    /// @inheritdoc ISchemaResolver\n    function isPayable() public pure virtual returns (bool) {\n        return false;\n    }\n\n    /// @dev ETH callback.\n    receive() external payable virtual {\n        if (!isPayable()) {\n            revert NotPayable();\n        }\n    }\n\n    /// @inheritdoc ISchemaResolver\n    function attest(Attestation calldata attestation) external payable onlyEAS returns (bool) {\n        return onAttest(attestation, msg.value);\n    }\n\n    /// @inheritdoc ISchemaResolver\n    function multiAttest(\n        Attestation[] calldata attestations,\n        uint256[] calldata values\n    ) external payable onlyEAS returns (bool) {\n        uint256 length = attestations.length;\n        if (length != values.length) {\n            revert InvalidLength();\n        }\n\n        // We are keeping track of the remaining ETH amount that can be sent to resolvers and will keep deducting\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n        // possible to send too much ETH anyway.\n        uint256 remainingValue = msg.value;\n\n        for (uint256 i = 0; i < length; ++i) {\n            // Ensure that the attester/revoker doesn't try to spend more than available.\n            uint256 value = values[i];\n            if (value > remainingValue) {\n                revert InsufficientValue();\n            }\n\n            // Forward the attestation to the underlying resolver and return false in case it isn't approved.\n            if (!onAttest(attestations[i], value)) {\n                return false;\n            }\n\n            unchecked {\n                // Subtract the ETH amount, that was provided to this attestation, from the global remaining ETH amount.\n                remainingValue -= value;\n            }\n        }\n\n        return true;\n    }\n\n    /// @inheritdoc ISchemaResolver\n    function revoke(Attestation calldata attestation) external payable onlyEAS returns (bool) {\n        return onRevoke(attestation, msg.value);\n    }\n\n    /// @inheritdoc ISchemaResolver\n    function multiRevoke(\n        Attestation[] calldata attestations,\n        uint256[] calldata values\n    ) external payable onlyEAS returns (bool) {\n        uint256 length = attestations.length;\n        if (length != values.length) {\n            revert InvalidLength();\n        }\n\n        // We are keeping track of the remaining ETH amount that can be sent to resolvers and will keep deducting\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n        // possible to send too much ETH anyway.\n        uint256 remainingValue = msg.value;\n\n        for (uint256 i = 0; i < length; ++i) {\n            // Ensure that the attester/revoker doesn't try to spend more than available.\n            uint256 value = values[i];\n            if (value > remainingValue) {\n                revert InsufficientValue();\n            }\n\n            // Forward the revocation to the underlying resolver and return false in case it isn't approved.\n            if (!onRevoke(attestations[i], value)) {\n                return false;\n            }\n\n            unchecked {\n                // Subtract the ETH amount, that was provided to this attestation, from the global remaining ETH amount.\n                remainingValue -= value;\n            }\n        }\n\n        return true;\n    }\n\n    /// @notice A resolver callback that should be implemented by child contracts.\n    /// @param attestation The new attestation.\n    /// @param value An explicit ETH amount that was sent to the resolver. Please note that this value is verified in\n    ///     both attest() and multiAttest() callbacks EAS-only callbacks and that in case of multi attestations, it'll\n    ///     usually hold that msg.value != value, since msg.value aggregated the sent ETH amounts for all the\n    ///     attestations in the batch.\n    /// @return Whether the attestation is valid.\n    function onAttest(Attestation calldata attestation, uint256 value) internal virtual returns (bool);\n\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\n    /// @param attestation The existing attestation to be revoked.\n    /// @param value An explicit ETH amount that was sent to the resolver. Please note that this value is verified in\n    ///     both revoke() and multiRevoke() callbacks EAS-only callbacks and that in case of multi attestations, it'll\n    ///     usually hold that msg.value != value, since msg.value aggregated the sent ETH amounts for all the\n    ///     attestations in the batch.\n    /// @return Whether the attestation can be revoked.\n    function onRevoke(Attestation calldata attestation, uint256 value) internal virtual returns (bool);\n\n    /// @dev Ensures that only the EAS contract can make this call.\n    function _onlyEAS() private view {\n        if (msg.sender != address(_eas)) {\n            revert AccessDenied();\n        }\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/AttestationResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title AttestationResolver\n/// @notice A sample schema resolver that checks whether an attestations attest to an existing attestation with a\n//  specific data field.\ncontract AttestationResolver is SchemaResolver {\n    error OutOfBounds();\n\n    bytes32 private constant MAGIC_DATA = \"EA5EA5EA5EA5EA5EA5EA5EA5EA5EA5\";\n\n    constructor(IEAS eas) SchemaResolver(eas) {}\n\n    function onAttest(Attestation calldata attestation, uint256 /*value*/) internal view override returns (bool) {\n        bytes32 uid = _toBytes32(attestation.data, 0);\n        Attestation memory targetAttestation = _eas.getAttestation(uid);\n\n        // Make sure that the encoded data is an attestation with the magic data.\n        return targetAttestation.data.length == MAGIC_DATA.length && bytes32(targetAttestation.data) == MAGIC_DATA;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n\n    function toBytes32(bytes memory data, uint256 start) external pure returns (bytes32) {\n        return _toBytes32(data, start);\n    }\n\n    function _toBytes32(bytes memory data, uint256 start) private pure returns (bytes32) {\n        unchecked {\n            if (data.length < start + 32) {\n                revert OutOfBounds();\n            }\n        }\n\n        bytes32 tempBytes32;\n\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            tempBytes32 := mload(add(add(data, 0x20), start))\n        }\n\n        return tempBytes32;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/AttesterResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title AttesterResolver\n/// @notice A sample schema resolver that checks whether the attestation is from a specific attester.\ncontract AttesterResolver is SchemaResolver {\n    address private immutable _targetAttester;\n\n    constructor(IEAS eas, address targetAttester) SchemaResolver(eas) {\n        _targetAttester = targetAttester;\n    }\n\n    function onAttest(Attestation calldata attestation, uint256 /*value*/) internal view override returns (bool) {\n        return attestation.attester == _targetAttester;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/DataResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title DataResolver\n/// @notice A sample schema resolver that checks whether an attestation data is either \\x00 or \\x01.\ncontract DataResolver is SchemaResolver {\n    bytes1 private constant DATA1 = \"\\x00\";\n    bytes1 private constant DATA2 = \"\\x01\";\n\n    constructor(IEAS eas) SchemaResolver(eas) {}\n\n    function onAttest(Attestation calldata attestation, uint256 /*value*/) internal pure override returns (bool) {\n        // Verifies that the data is either 0 or 1.\n        return attestation.data.length == 1 && (attestation.data[0] == DATA1 || attestation.data[0] == DATA2);\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/ExpirationTimeResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title ExpirationTimeResolver\n/// @notice A sample schema resolver that checks whether the expiration time is later than a specific timestamp.\ncontract ExpirationTimeResolver is SchemaResolver {\n    uint256 private immutable _validAfter;\n\n    constructor(IEAS eas, uint256 validAfter) SchemaResolver(eas) {\n        _validAfter = validAfter;\n    }\n\n    function onAttest(Attestation calldata attestation, uint256 /*value*/) internal view override returns (bool) {\n        return attestation.expirationTime >= _validAfter;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/PayingResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title PayingResolver\n/// @notice A sample schema resolver that pays attesters (and expects the payment to be returned during revocations).\ncontract PayingResolver is SchemaResolver {\n    using Address for address payable;\n\n    error InvalidValue();\n\n    uint256 private immutable _incentive;\n\n    constructor(IEAS eas, uint256 incentive) SchemaResolver(eas) {\n        _incentive = incentive;\n    }\n\n    function isPayable() public pure override returns (bool) {\n        return true;\n    }\n\n    function onAttest(Attestation calldata attestation, uint256 value) internal override returns (bool) {\n        if (value > 0) {\n            return false;\n        }\n\n        payable(attestation.attester).transfer(_incentive);\n\n        return true;\n    }\n\n    function onRevoke(Attestation calldata attestation, uint256 value) internal override returns (bool) {\n        if (value < _incentive) {\n            return false;\n        }\n\n        if (value > _incentive) {\n            payable(address(attestation.attester)).sendValue(value - _incentive);\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/RecipientResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title RecipientResolver\n/// @notice A sample schema resolver that checks whether the attestation is to a specific recipient.\ncontract RecipientResolver is SchemaResolver {\n    address private immutable _targetRecipient;\n\n    constructor(IEAS eas, address targetRecipient) SchemaResolver(eas) {\n        _targetRecipient = targetRecipient;\n    }\n\n    function onAttest(Attestation calldata attestation, uint256 /*value*/) internal view override returns (bool) {\n        return attestation.recipient == _targetRecipient;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/RevocationResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title RevocationResolver\n/// @notice A sample schema resolver that controls revocations.\ncontract RevocationResolver is SchemaResolver {\n    bool private _revocation;\n\n    constructor(IEAS eas) SchemaResolver(eas) {}\n\n    function setRevocation(bool status) external {\n        _revocation = status;\n    }\n\n    function onAttest(Attestation calldata /*attestation)*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal view override returns (bool) {\n        return _revocation;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/TokenResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title TokenResolver\n/// @notice A sample schema resolver that checks whether a specific amount of tokens was approved to be included in an attestation.\ncontract TokenResolver is SchemaResolver {\n    using SafeERC20 for IERC20;\n\n    error InvalidAllowance();\n\n    IERC20 private immutable _targetToken;\n    uint256 private immutable _targetAmount;\n\n    constructor(IEAS eas, IERC20 targetToken, uint256 targetAmount) SchemaResolver(eas) {\n        _targetToken = targetToken;\n        _targetAmount = targetAmount;\n    }\n\n    function onAttest(Attestation calldata attestation, uint256 /*value*/) internal view override returns (bool) {\n        if (_targetToken.allowance(attestation.attester, address(this)) < _targetAmount) {\n            revert InvalidAllowance();\n        }\n\n        return true;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/resolver/examples/ValueResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { SchemaResolver } from \"../SchemaResolver.sol\";\n\nimport { IEAS, Attestation } from \"../../IEAS.sol\";\n\n/// @title ValueResolver\n/// @notice A sample schema resolver that checks whether a specific amount of ETH was sent with an attestation.\ncontract ValueResolver is SchemaResolver {\n    uint256 private immutable _targetValue;\n\n    constructor(IEAS eas, uint256 targetValue) SchemaResolver(eas) {\n        _targetValue = targetValue;\n    }\n\n    function isPayable() public pure override returns (bool) {\n        return true;\n    }\n\n    function onAttest(Attestation calldata /*attestation*/, uint256 value) internal view override returns (bool) {\n        return value == _targetValue;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/tests/TestEAS.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { EAS } from \"../EAS.sol\";\n\nimport { ISchemaRegistry } from \"../ISchemaRegistry.sol\";\n\ncontract TestEAS is EAS {\n    uint64 private constant INITIAL_TIME = 0;\n\n    uint64 private _currentTime = INITIAL_TIME;\n\n    constructor(ISchemaRegistry registry) EAS(registry) {}\n\n    function setTime(uint64 newTime) external {\n        _currentTime = newTime;\n    }\n\n    function getTime() external view returns (uint64) {\n        return _time();\n    }\n\n    function _time() internal view override returns (uint64) {\n        return _currentTime == INITIAL_TIME ? super._time() : _currentTime;\n    }\n}\n"
  },
  {
    "path": "contracts/tests/TestERC20Token.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract TestERC20Token is ERC20 {\n    constructor(string memory name, string memory symbol, uint256 totalSupply) ERC20(name, symbol) {\n        _mint(msg.sender, totalSupply);\n    }\n}\n"
  },
  {
    "path": "contracts/tests/TestSchemaResolver.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { IEAS, Attestation } from \"./../IEAS.sol\";\nimport { SchemaResolver } from \"./../resolver/SchemaResolver.sol\";\n\ncontract TestSchemaResolver is SchemaResolver {\n    constructor(IEAS eas) SchemaResolver(eas) {}\n\n    function onAttest(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n\n    function onRevoke(Attestation calldata /*attestation*/, uint256 /*value*/) internal pure override returns (bool) {\n        return true;\n    }\n}\n"
  },
  {
    "path": "contracts/tests/eip1271/TestEIP1271Signer.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\n\ncontract TestEIP1271Signer is IERC1271 {\n    bytes4 private constant EIP1271_INVALID_MAGIC_VALUE = 0xffffffff;\n\n    mapping(bytes32 hash => bytes signature) private _validSignatures;\n\n    function mockSignature(bytes32 hash, bytes calldata signature) external {\n        _validSignatures[hash] = signature;\n    }\n\n    function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue) {\n        bytes memory storedSignature = _validSignatures[hash];\n        if (storedSignature.length == signature.length && keccak256(storedSignature) == keccak256(signature)) {\n            return IERC1271.isValidSignature.selector;\n        }\n\n        return EIP1271_INVALID_MAGIC_VALUE;\n    }\n}\n"
  },
  {
    "path": "contracts/tests/eip1271/TestEIP1271Verifier.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { EIP1271Verifier } from \"../../eip1271/EIP1271Verifier.sol\";\nimport { DelegatedAttestationRequest, DelegatedRevocationRequest } from \"../../IEAS.sol\";\nimport { Semver } from \"../../Semver.sol\";\n\ncontract TestEIP1271Verifier is Semver, EIP1271Verifier {\n    constructor(string memory name) Semver(1, 4, 0) EIP1271Verifier(name, \"1.4.0\") {}\n\n    function verifyAttest(DelegatedAttestationRequest memory request) external {\n        _verifyAttest(request);\n    }\n\n    function verifyRevoke(DelegatedRevocationRequest memory request) external {\n        _verifyRevoke(request);\n    }\n}\n"
  },
  {
    "path": "contracts/tests/eip712/proxy/TestEIP712Proxy.sol",
    "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.28;\n\nimport { IEAS } from \"../../../IEAS.sol\";\nimport { EIP712Proxy, DelegatedProxyAttestationRequest, DelegatedProxyRevocationRequest } from \"../../../eip712/proxy/EIP712Proxy.sol\";\n\ncontract TestEIP712Proxy is EIP712Proxy {\n    constructor(IEAS eas, string memory name) EIP712Proxy(eas, name) {}\n\n    function verifyAttest(DelegatedProxyAttestationRequest memory request) external {\n        _verifyAttest(request);\n    }\n\n    function verifyRevoke(DelegatedProxyRevocationRequest memory request) external {\n        _verifyRevoke(request);\n    }\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/.chainId",
    "content": "42170\n"
  },
  {
    "path": "deployments/arbitrum-nova/.migrations.json",
    "content": "{\n  \"000001-registry\": 1706812884,\n  \"000002-eas\": 1706812886,\n  \"000003-register-initial-schemas\": 1706812965,\n  \"000004-name-initial-schemas\": 1706813044,\n  \"000005-eip712-proxy\": 1706813046,\n  \"000006-indexer\": 1706813048\n}"
  },
  {
    "path": "deployments/arbitrum-nova/EAS.json",
    "content": "{\n  \"address\": \"0x6d3dC0Fe5351087E3Af3bDe8eB3F7350ed894fc3\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf2f0346e8ed49fb8765ce5b532698f14c0be51a86afb8e43427f869af5204d5b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x0a83Ac5963660cDcbae0Aa2F7aa6885eA17A4DeA\",\n    \"contractAddress\": \"0x6d3dC0Fe5351087E3Af3bDe8eB3F7350ed894fc3\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"5745145\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x828ba9acdd5a5e106042b77ccaf0ce41c4cdef226275a9396d7a977a3831b6b7\",\n    \"transactionHash\": \"0xf2f0346e8ed49fb8765ce5b532698f14c0be51a86afb8e43427f869af5204d5b\",\n    \"logs\": [],\n    \"blockNumber\": 44665879,\n    \"cumulativeGasUsed\": \"5745145\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x49563d0DA8DF38ef2eBF9C1167270334D72cE0AE\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0ccad8feb72c73528fddde76e00bd7717233711079e744165e34312169f85684\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8a6310b2a5d70bfd849fbf470507a545df5fb4934b59cd95337014ba017e485a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 1947,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 1949,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6347,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6351,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3342,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3236_storage)\"\n      },\n      {\n        \"astId\": 3346,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3352,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3236_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3236_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3236_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3217,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3219,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3221,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3223,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3225,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3227,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3229,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3231,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3233,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3235,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-nova/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xEbf2DeeD690F8A68b8248d6a12231ee70ED2154A\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x720015bb5bc7c41874d7d85f7c601f04514d3658ec091bcdd359599c6fabc877\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x0a83Ac5963660cDcbae0Aa2F7aa6885eA17A4DeA\",\n    \"contractAddress\": \"0xEbf2DeeD690F8A68b8248d6a12231ee70ED2154A\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"3341438\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xec8b63bf5ec98318f60e2a89f010e458e66423d519cf21a628e61be9b0ac8593\",\n    \"transactionHash\": \"0x720015bb5bc7c41874d7d85f7c601f04514d3658ec091bcdd359599c6fabc877\",\n    \"logs\": [],\n    \"blockNumber\": 44666387,\n    \"cumulativeGasUsed\": \"3341438\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x6d3dC0Fe5351087E3Af3bDe8eB3F7350ed894fc3\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 1947,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 1949,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6751,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6755,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 6759,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-nova/Indexer.json",
    "content": "{\n  \"address\": \"0x7182Be5e84aFEe9Dc29C69D081F8A0FA834d6CB8\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd16c9e26e3a1adda6081a48a528165e6640741c051804d8b8fe6126c5792c3f6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x0a83Ac5963660cDcbae0Aa2F7aa6885eA17A4DeA\",\n    \"contractAddress\": \"0x7182Be5e84aFEe9Dc29C69D081F8A0FA834d6CB8\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"1425556\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x9edfbcbd337fc4fb1b0d5d7fc512f5700f650d1a30c102d4ddfe416231b645c1\",\n    \"transactionHash\": \"0xd16c9e26e3a1adda6081a48a528165e6640741c051804d8b8fe6126c5792c3f6\",\n    \"logs\": [],\n    \"blockNumber\": 44666394,\n    \"cumulativeGasUsed\": \"1650383\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x6d3dC0Fe5351087E3Af3bDe8eB3F7350ed894fc3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5599,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 5606,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 5615,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 5620,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 5624,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-nova/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x49563d0DA8DF38ef2eBF9C1167270334D72cE0AE\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc65af2be69ea0bae2437ed49f3ec1202ee5fdead7815dd9128aaee71de66b869\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x0a83Ac5963660cDcbae0Aa2F7aa6885eA17A4DeA\",\n    \"contractAddress\": \"0x49563d0DA8DF38ef2eBF9C1167270334D72cE0AE\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"935454\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x7eea1fda493cd4108ca758374d5d48012ed11ce14d739c59694e663ca5327e84\",\n    \"transactionHash\": \"0xc65af2be69ea0bae2437ed49f3ec1202ee5fdead7815dd9128aaee71de66b869\",\n    \"logs\": [],\n    \"blockNumber\": 44665873,\n    \"cumulativeGasUsed\": \"935454\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba2bb65a85b07bd4b0dce71c2603601d264f9fae7f10aa0a90849196df5f2b2a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6137,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)5519_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)7739\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)5519_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)5519_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)5519_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 5511,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5514,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)7739\"\n          },\n          {\n            \"astId\": 5516,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 5518,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-nova/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-nova/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-one/.chainId",
    "content": "42161\n"
  },
  {
    "path": "deployments/arbitrum-one/.migrations.json",
    "content": "{\n  \"000001-registry\": 1677352373,\n  \"000002-eas\": 1677352375,\n  \"000003-register-initial-schemas\": 1677352432,\n  \"000004-name-initial-schemas\": 1677352617\n}"
  },
  {
    "path": "deployments/arbitrum-one/EAS.json",
    "content": "{\n  \"address\": \"0xbD75f629A22Dc1ceD33dDA0b68c546A1c035c458\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4e6a5342968b8bed34fe4b32e68a6a858991acd79b7c186ec847ab74e6a4893e\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x01a93612f26100B6E18a2e3dd57df5c3ccaFeca1\",\n    \"contractAddress\": \"0xbD75f629A22Dc1ceD33dDA0b68c546A1c035c458\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"23485755\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x2b879373567dd679b7d8166800ad9cb86b4570cc7a5d760a7299b0494a9a5a59\",\n    \"transactionHash\": \"0x4e6a5342968b8bed34fe4b32e68a6a858991acd79b7c186ec847ab74e6a4893e\",\n    \"logs\": [],\n    \"blockNumber\": 64528381,\n    \"cumulativeGasUsed\": \"23485755\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\"0xA310da9c5B885E7fb3fbA9D66E9Ba6Df512b78eB\"],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"a71fe784ec2ddd03c0373182f6192f42\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"details\\\":\\\"Emitted when an attestation has been made.\\\",\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"details\\\":\\\"Emitted when an attestation has been revoked.\\\",\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"details\\\":\\\"Emitted when a data has been revoked.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"details\\\":\\\"Emitted when a data has been timestamped.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"details\\\":\\\"Attests to a specific schema.\\\",\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request. Example: attest({     schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",     data: {         recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",         expirationTime: 0,         revocable: true,         refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",         data: \\\\\\\"0xF00D\\\\\\\",         value: 0     } })\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation.\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\\\":{\\\"details\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\",\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request. Example: attestByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     signature: {         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e' })\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation.\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"details\\\":\\\"Returns an existing attestation by UID.\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"details\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getNonce(address)\\\":{\\\"details\\\":\\\"Returns the current nonce per-account.\\\",\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"details\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"details\\\":\\\"Returns the address of the global schema registry.\\\",\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"details\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"details\\\":\\\"Checks whether an attestation exists.\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"details\\\":\\\"Attests to multiple schemas.\\\",\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttest([{     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 1000     },     {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 0,         revocable: false,         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',         data: '0x00',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: true,         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',         data: '0x12345678',         value: 0     }, }])\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations.\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\\\":{\\\"details\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\",\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttestByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     {         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: false,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x00',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4' }])\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations.\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"details\\\":\\\"Revokes existing attestations to multiple schemas.\\\",\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevoke([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',         value: 0     }, }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\\\":{\\\"details\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\",\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"details\\\":\\\"Revokes the specified multiple bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"details\\\":\\\"Timestamps the specified multiple bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"details\\\":\\\"Revokes an existing attestation to a specific schema. Example: revoke({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',         value: 0     } })\\\",\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request.\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\\\":{\\\"details\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature. Example: revokeByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',         value: 0     },     signature: {         v: 27,         r: '0xb593...7142',         s: '0x0f5b...2cce'     },     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' })\\\",\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request.\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"details\\\":\\\"Revokes the specified bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"details\\\":\\\"Timestamps the specified bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}}},\\\"title\\\":\\\"EAS - Ethereum Attestation Service\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        bytes32 r,\\\\n        bytes32 vs\\\\n    ) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(\\\\n        bytes32 hash,\\\\n        bytes32 r,\\\\n        bytes32 vs\\\\n    ) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", hash));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\", domainSeparator, structHash));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * _Available since v3.4._\\\\n */\\\\nabstract contract EIP712 {\\\\n    /* solhint-disable var-name-mixedcase */\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\\\n    uint256 private immutable _CACHED_CHAIN_ID;\\\\n    address private immutable _CACHED_THIS;\\\\n\\\\n    bytes32 private immutable _HASHED_NAME;\\\\n    bytes32 private immutable _HASHED_VERSION;\\\\n    bytes32 private immutable _TYPE_HASH;\\\\n\\\\n    /* solhint-enable var-name-mixedcase */\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        bytes32 hashedName = keccak256(bytes(name));\\\\n        bytes32 hashedVersion = keccak256(bytes(version));\\\\n        bytes32 typeHash = keccak256(\\\\n            \\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\"\\\\n        );\\\\n        _HASHED_NAME = hashedName;\\\\n        _HASHED_VERSION = hashedVersion;\\\\n        _CACHED_CHAIN_ID = block.chainid;\\\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\\\n        _CACHED_THIS = address(this);\\\\n        _TYPE_HASH = typeHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\\\n            return _CACHED_DOMAIN_SEPARATOR;\\\\n        } else {\\\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator(\\\\n        bytes32 typeHash,\\\\n        bytes32 nameHash,\\\\n        bytes32 versionHash\\\\n    ) private view returns (bytes32) {\\\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(\\\\n        uint256 x,\\\\n        uint256 y,\\\\n        uint256 denominator\\\\n    ) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1);\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(\\\\n        uint256 x,\\\\n        uint256 y,\\\\n        uint256 denominator,\\\\n        Rounding rounding\\\\n    ) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10**64) {\\\\n                value /= 10**64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10**32) {\\\\n                value /= 10**32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10**16) {\\\\n                value /= 10**16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10**8) {\\\\n                value /= 10**8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10**4) {\\\\n                value /= 10**4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10**2) {\\\\n                value /= 10**2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10**1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID, EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { EIP712Verifier } from \\\\\\\"./EIP712Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nstruct AttestationsResult {\\\\n    uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n    bytes32[] uids; // UIDs of the new attestations.\\\\n}\\\\n\\\\n/**\\\\n * @title EAS - Ethereum Attestation Service\\\\n */\\\\ncontract EAS is IEAS, EIP712Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AccessDenied();\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidLength();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotFound();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    // The version of the contract.\\\\n    string public constant VERSION = \\\\\\\"0.26\\\\\\\";\\\\n\\\\n    // A zero expiration represents an non-expiring attestation.\\\\n    uint64 private constant NO_EXPIRATION_TIME = 0;\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp)) private _revocationsOffchain;\\\\n\\\\n    /**\\\\n     * @dev Creates a new EAS instance.\\\\n     *\\\\n     * @param registry The address of the global schema registry.\\\\n     */\\\\n    constructor(ISchemaRegistry registry) EIP712Verifier(VERSION) {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function attest(AttestationRequest calldata request) public payable virtual returns (bytes32) {\\\\n        AttestationRequestData[] memory requests = new AttestationRequestData[](1);\\\\n        requests[0] = request.data;\\\\n\\\\n        return _attest(request.schema, requests, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        bytes32[][] memory totalUids = new bytes32[][](multiRequests.length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiRequests.length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        bytes32[][] memory totalUids = new bytes32[][](multiDelegatedRequests.length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiDelegatedRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiDelegatedRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            if (data.length == 0 || data.length != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < data.length; ) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester\\\\n                    })\\\\n                );\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                }\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revoke(RevocationRequest calldata request) public payable virtual {\\\\n        RevocationRequestData[] memory requests = new RevocationRequestData[](1);\\\\n        requests[0] = request.data;\\\\n\\\\n        _revoke(request.schema, requests, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiDelegatedRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiDelegatedRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            if (data.length == 0 || data.length != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < data.length; ) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker\\\\n                    })\\\\n                );\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                }\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            _timestamp(data[i], time);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /**\\\\n      * @inheritdoc IEAS\\\\n      */\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema.\\\\n     *\\\\n     * @param schema // the unique identifier of the schema to attest to.\\\\n     * @param data The arguments of the attestation requests.\\\\n     * @param attester The attesting account.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return The UID of the new attestations and the total sent ETH amount.\\\\n     */\\\\n    function _attest(\\\\n        bytes32 schema,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schema);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schema,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != 0) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schema);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema.\\\\n     *\\\\n     * @param schema The unique identifier of the schema to attest to.\\\\n     * @param data The arguments of the revocation requests.\\\\n     * @param revoker The revoking account.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _revoke(\\\\n        bytes32 schema,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schema);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schema) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestation.recipient, revoker, request.uid, attestation.schema);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n     *\\\\n     * @param schemaRecord The schema of the attestation.\\\\n     * @param attestation The data of the attestation to make/revoke.\\\\n     * @param value An explicit ETH amount to send to the resolver.\\\\n     * @param isRevocation Whether to resolve an attestation or its revocation.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0 && !resolver.isPayable()) {\\\\n            revert NotPayable();\\\\n        }\\\\n\\\\n        // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n        if (value > availableValue) {\\\\n            revert InsufficientValue();\\\\n        }\\\\n\\\\n        // Ensure to deduct the sent value explicitly.\\\\n        unchecked {\\\\n            availableValue -= value;\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Resolves multiple attestations or revocations of existing attestations.\\\\n     *\\\\n     * @param schemaRecord The schema of the attestation.\\\\n     * @param attestations The data of the attestations to make/revoke.\\\\n     * @param values Explicit ETH amounts to send to the resolver.\\\\n     * @param isRevocation Whether to resolve an attestation or its revocation.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; ) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++i;\\\\n                }\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value != 0 && !resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Calculates a UID for a given attestation.\\\\n     *\\\\n     * @param attestation The input attestation.\\\\n     * @param bump A bump value to use in case of a UID conflict.\\\\n     *\\\\n     * @return Attestation UID.\\\\n     */\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Refunds remaining ETH amount to the attester.\\\\n     *\\\\n     * @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n     */\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Merges lists of UIDs.\\\\n     *\\\\n     * @param uidLists The provided lists of UIDs.\\\\n     * @param uidsCount Total UIDs count.\\\\n     *\\\\n     * @return A merged and flatten list of all the UIDs.\\\\n     */\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidsCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidsCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        for (uint256 i = 0; i < uidLists.length; ) {\\\\n            bytes32[] memory currentUids = uidLists[i];\\\\n            for (uint256 j = 0; j < currentUids.length; ) {\\\\n                uids[currentIndex] = currentUids[j];\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     * @param time The timestamp.\\\\n     */\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /**\\\\n         * @dev Timestamps the specified bytes32 data.\\\\n         *\\\\n         * @param data The data to timestamp.\\\\n         * @param time The timestamp.\\\\n         */\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n     * current block time.\\\\n     */\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8b7233cc7377d5d90ccffcd67c93287fda47bcdc92ca0df0b10c22bf35a3f231\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EIP712Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title EIP712 typed signatures verifier for EAS delegated attestations.\\\\n */\\\\nabstract contract EIP712Verifier is EIP712 {\\\\n    error InvalidSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 nonce)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de61;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 nonce)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address => uint256) private _nonces;\\\\n\\\\n    /**\\\\n     * @dev Creates a new EIP712Verifier instance.\\\\n     *\\\\n     * @param version The current major version of the signing domain\\\\n     */\\\\n    constructor(string memory version) EIP712(\\\\\\\"EAS\\\\\\\", version) {}\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n     */\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the current nonce per-account.\\\\n     *\\\\n     * @param account The requested account.\\\\n     *\\\\n     * @return The current nonce.\\\\n     */\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the EIP712 type hash for the attest function.\\\\n     */\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the EIP712 type hash for the revoke function.\\\\n     */\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Verifies delegated attestation request.\\\\n     *\\\\n     * @param request The arguments of the delegated attestation request.\\\\n     */\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        AttestationRequestData memory data = request.data;\\\\n        EIP712Signature memory signature = request.signature;\\\\n\\\\n        uint256 nonce;\\\\n        unchecked {\\\\n            nonce = _nonces[request.attester]++;\\\\n        }\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    nonce\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Verifies delegated revocation request.\\\\n     *\\\\n     * @param request The arguments of the delegated revocation request.\\\\n     */\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        RevocationRequestData memory data = request.data;\\\\n        EIP712Signature memory signature = request.signature;\\\\n\\\\n        uint256 nonce;\\\\n        unchecked {\\\\n            nonce = _nonces[request.revoker]++;\\\\n        }\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(REVOKE_TYPEHASH, request.schema, data.uid, nonce)));\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x373763eb3fa3bd3a8b7e839bfdc3319fbcd259d1029f227b88121c5450bdfae4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the attestation request.\\\\n */\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the attestation request.\\\\n */\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the full delegated attestation request.\\\\n */\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    EIP712Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the multi attestation request.\\\\n */\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the delegated multi attestation request.\\\\n */\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    EIP712Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the revocation request.\\\\n */\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the revocation request.\\\\n */\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the full delegated revocation request.\\\\n */\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    EIP712Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the multi revocation request.\\\\n */\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the delegated multi revocation request.\\\\n */\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    EIP712Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n}\\\\n\\\\n/**\\\\n * @title EAS - Ethereum Attestation Service interface.\\\\n */\\\\ninterface IEAS {\\\\n    /**\\\\n     * @dev Emitted when an attestation has been made.\\\\n     *\\\\n     * @param recipient The recipient of the attestation.\\\\n     * @param attester The attesting account.\\\\n     * @param uid The UID the revoked attestation.\\\\n     * @param schema The UID of the schema.\\\\n     */\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schema);\\\\n\\\\n    /**\\\\n     * @dev Emitted when an attestation has been revoked.\\\\n     *\\\\n     * @param recipient The recipient of the attestation.\\\\n     * @param attester The attesting account.\\\\n     * @param schema The UID of the schema.\\\\n     * @param uid The UID the revoked attestation.\\\\n     */\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schema);\\\\n\\\\n    /**\\\\n     * @dev Emitted when a data has been timestamped.\\\\n     *\\\\n     * @param data The data.\\\\n     * @param timestamp The timestamp.\\\\n     */\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /**\\\\n     * @dev Emitted when a data has been revoked.\\\\n     *\\\\n     * @param revoker The address of the revoker.\\\\n     * @param data The data.\\\\n     * @param timestamp The timestamp.\\\\n     */\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the global schema registry.\\\\n     *\\\\n     * @return The address of the global schema registry.\\\\n     */\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema.\\\\n     *\\\\n     * @param request The arguments of the attestation request.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * attest({\\\\n     *     schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n     *     data: {\\\\n     *         recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n     *         expirationTime: 0,\\\\n     *         revocable: true,\\\\n     *         refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n     *         data: \\\\\\\"0xF00D\\\\\\\",\\\\n     *         value: 0\\\\n     *     }\\\\n     * })\\\\n     *\\\\n     * @return The UID of the new attestation.\\\\n     */\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema via the provided EIP712 signature.\\\\n     *\\\\n     * @param delegatedRequest The arguments of the delegated attestation request.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * attestByDelegation({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     signature: {\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e'\\\\n     * })\\\\n     *\\\\n     * @return The UID of the new attestation.\\\\n     */\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Attests to multiple schemas.\\\\n     *\\\\n     * @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n     * schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiAttest([{\\\\n     *     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n     *     data: [{\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: false,\\\\n     *         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n     *         data: '0x00',\\\\n     *         value: 0\\\\n     *     }],\\\\n     * },\\\\n     * {\\\\n     *     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n     *     data: [{\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n     *         data: '0x12345678',\\\\n     *         value: 0\\\\n     *     },\\\\n     * }])\\\\n     *\\\\n     * @return The UIDs of the new attestations.\\\\n     */\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /**\\\\n     * @dev Attests to multiple schemas using via provided EIP712 signatures.\\\\n     *\\\\n     * @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n     * grouped by distinct schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiAttestByDelegation([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     {\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: false,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x00',\\\\n     *         value: 0\\\\n     *     }],\\\\n     *     signatures: [{\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     {\\\\n     *         v: 28,\\\\n     *         r: '0x487s...67bb',\\\\n     *         s: '0x12ad...2366'\\\\n     *     }],\\\\n     *     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4'\\\\n     * }])\\\\n     *\\\\n     * @return The UIDs of the new attestations.\\\\n     */\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * revoke({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n     *         value: 0\\\\n     *     }\\\\n     * })\\\\n     *\\\\n     * @param request The arguments of the revocation request.\\\\n     */\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * revokeByDelegation({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     signature: {\\\\n     *         v: 27,\\\\n     *         r: '0xb593...7142',\\\\n     *         s: '0x0f5b...2cce'\\\\n     *     },\\\\n     *     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992'\\\\n     * })\\\\n     *\\\\n     * @param delegatedRequest The arguments of the delegated revocation request.\\\\n     */\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes existing attestations to multiple schemas.\\\\n     *\\\\n     * @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n     * schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiRevoke([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n     *         value: 0\\\\n     *     }],\\\\n     * },\\\\n     * {\\\\n     *     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n     *     data: [{\\\\n     *         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n     *         value: 0\\\\n     *     },\\\\n     * }])\\\\n     */\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n     *\\\\n     * @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests should be\\\\n     * grouped by distinct schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiRevokeByDelegation([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n     *         value: 0\\\\n     *     }],\\\\n     *     signatures: [{\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     {\\\\n     *         v: 28,\\\\n     *         r: '0x487s...67bb',\\\\n     *         s: '0x12ad...2366'\\\\n     *     }],\\\\n     *     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992'\\\\n     * }])\\\\n     *\\\\n     */\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified multiple bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Revokes the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was revoked with.\\\\n     */\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Revokes the specified multiple bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was revoked with.\\\\n     */\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing attestation by UID.\\\\n     *\\\\n     * @param uid The UID of the attestation to retrieve.\\\\n     *\\\\n     * @return The attestation data members.\\\\n     */\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /**\\\\n     * @dev Checks whether an attestation exists.\\\\n     *\\\\n     * @param uid The UID of the attestation to retrieve.\\\\n     *\\\\n     * @return Whether an attestation exists.\\\\n     */\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the timestamp that the specified data was timestamped with.\\\\n     *\\\\n     * @param data The data to query.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Returns the timestamp that the specified data was timestamped with.\\\\n     *\\\\n     * @param data The data to query.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x77037a2caac190938c12fc150159abc4b59069fa4cb71a7b75f0c3d08a55a419\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title A struct representing a record for a submitted schema.\\\\n */\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/**\\\\n * @title The global schema registry interface.\\\\n */\\\\ninterface ISchemaRegistry {\\\\n    /**\\\\n     * @dev Emitted when a new schema has been registered\\\\n     *\\\\n     * @param uid The schema UID.\\\\n     * @param registerer The address of the account used to register the schema.\\\\n     */\\\\n    event Registered(bytes32 indexed uid, address registerer);\\\\n\\\\n    /**\\\\n     * @dev Submits and reserves a new schema\\\\n     *\\\\n     * @param schema The schema data schema.\\\\n     * @param resolver An optional schema resolver.\\\\n     * @param revocable Whether the schema allows revocations explicitly.\\\\n     *\\\\n     * @return The UID of the new schema.\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing schema by UID\\\\n     *\\\\n     * @param uid The UID of the schema to retrieve.\\\\n     *\\\\n     * @return The schema data members.\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef47e449dd02bd034e26b1dea505ce533906f8462fc674c938ed0e872a68d640\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Types.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n/**\\\\n * @dev A struct representing EIP712 signature data.\\\\n */\\\\nstruct EIP712Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing a single attestation.\\\\n */\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x547096b5cb7bfad9591bdc520705f8110534cd040ed0f7a0ba8d83ea4a565b45\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The interface of an optional schema resolver.\\\\n */\\\\ninterface ISchemaResolver {\\\\n    /**\\\\n     * @dev Returns whether the resolver supports ETH transfers.\\\\n     */\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation and verifies whether it's valid.\\\\n     *\\\\n     * @param attestation The new attestation.\\\\n     *\\\\n     * @return Whether the attestation is valid.\\\\n     */\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes multiple attestations and verifies whether they are valid.\\\\n     *\\\\n     * @param attestations The new attestations.\\\\n     * @param values Explicit ETH amounts which were sent with each attestation.\\\\n     *\\\\n     * @return Whether all the attestations are valid.\\\\n     */\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation revocation and verifies if it can be revoked.\\\\n     *\\\\n     * @param attestation The existing attestation to be revoked.\\\\n     *\\\\n     * @return Whether the attestation can be revoked.\\\\n     */\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes revocation of multiple attestation and verifies they can be revoked.\\\\n     *\\\\n     * @param attestations The existing attestations to be revoked.\\\\n     * @param values Explicit ETH amounts which were sent with each revocation.\\\\n     *\\\\n     * @return Whether the attestations can be revoked.\\\\n     */\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0f3a75c28cdb91fa9227a6eef183379ecea2b6bf38db52795b5c4e6af79299e8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61016034620001b657601f62004fdb38819003918201601f19168301926001600160401b0392909183851183861017620001a0578160209284926040978852833981010312620001b657516001600160a01b03811692838203620001b6578051926200006b84620001bb565b6004845260208401631817191b60e11b81526003602084516200008e81620001bb565b828152016245415360e81b81522094519020948460e052610100958087524660a052835160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f978884528683015260608201524660808201523060a082015260a0815260c081019381851090851117620001a0578385525190206080523060c052610120948552156200019157506101409182525191614e039384620001d8853960805184614892015260a0518461494d015260c05184614863015260e051846148e101525183614907015251826148be01525181818161028601528181610ab4015281816110b801528181612b5e0152818161324c01526134ca0152f35b6311a1e69760e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620001a05760405256fe61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b60e0526110678261295c565b602060e05101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d576000608052611737575b506080515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60c0526000915b83831061113f5761112b3460c05160a05160805161376d565b60e0515260206102fb8160e05101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060805101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560c0516122bd565b528261158585602060e05101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b608052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\",\n  \"deployedBytecode\": \"0x61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b60e0526110678261295c565b602060e05101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d576000608052611737575b506080515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60c0526000915b83831061113f5761112b3460c05160a05160805161376d565b60e0515260206102fb8160e05101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060805101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560c0516122bd565b528261158585602060e05101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b608052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"details\": \"Emitted when an attestation has been made.\",\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"details\": \"Emitted when an attestation has been revoked.\",\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"details\": \"Emitted when a data has been revoked.\",\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"details\": \"Emitted when a data has been timestamped.\",\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"details\": \"Attests to a specific schema.\",\n        \"params\": {\n          \"request\": \"The arguments of the attestation request. Example: attest({     schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",     data: {         recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",         expirationTime: 0,         revocable: true,         refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",         data: \\\"0xF00D\\\",         value: 0     } })\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation.\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": {\n        \"details\": \"Attests to a specific schema via the provided EIP712 signature.\",\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request. Example: attestByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     signature: {         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e' })\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation.\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"details\": \"Returns an existing attestation by UID.\",\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"details\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getNonce(address)\": {\n        \"details\": \"Returns the current nonce per-account.\",\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"details\": \"Returns the timestamp that the specified data was timestamped with.\",\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"details\": \"Returns the address of the global schema registry.\",\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"details\": \"Returns the timestamp that the specified data was timestamped with.\",\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"details\": \"Checks whether an attestation exists.\",\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"details\": \"Attests to multiple schemas.\",\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttest([{     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 1000     },     {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 0,         revocable: false,         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',         data: '0x00',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: true,         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',         data: '0x12345678',         value: 0     }, }])\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations.\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": {\n        \"details\": \"Attests to multiple schemas using via provided EIP712 signatures.\",\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttestByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     {         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: false,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x00',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4' }])\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations.\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"details\": \"Revokes existing attestations to multiple schemas.\",\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevoke([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',         value: 0     }, }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": {\n        \"details\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\",\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"details\": \"Revokes the specified multiple bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"details\": \"Timestamps the specified multiple bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"details\": \"Revokes an existing attestation to a specific schema. Example: revoke({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',         value: 0     } })\",\n        \"params\": {\n          \"request\": \"The arguments of the revocation request.\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": {\n        \"details\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature. Example: revokeByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',         value: 0     },     signature: {         v: 27,         r: '0xb593...7142',         s: '0x0f5b...2cce'     },     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' })\",\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request.\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"details\": \"Revokes the specified bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"details\": \"Timestamps the specified bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      }\n    },\n    \"title\": \"EAS - Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 3790,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 1977,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)4348_storage)\"\n      },\n      {\n        \"astId\": 1981,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 1987,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)4348_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)4348_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_struct(Attestation)4348_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 4329,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4331,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4333,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4335,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4337,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4339,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4341,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4343,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4345,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 4347,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-one/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0xA310da9c5B885E7fb3fbA9D66E9Ba6Df512b78eB\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x6e6f25f46c9578e74212ac2e17d54eb346c8456790b9df5b69119ee644e59e54\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x01a93612f26100B6E18a2e3dd57df5c3ccaFeca1\",\n    \"contractAddress\": \"0xA310da9c5B885E7fb3fbA9D66E9Ba6Df512b78eB\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"3460844\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x990e4fb9e72f2b43162dc62a95dc1bec254ef02e34c8ee6ee3bc1ce72cc504ee\",\n    \"transactionHash\": \"0x6e6f25f46c9578e74212ac2e17d54eb346c8456790b9df5b69119ee644e59e54\",\n    \"logs\": [],\n    \"blockNumber\": 64528375,\n    \"cumulativeGasUsed\": \"3460844\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"78891d974a28827b8f023101fe409776\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address)\\\":{\\\"details\\\":\\\"Emitted when a new schema has been registered\\\",\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"details\\\":\\\"Returns an existing schema by UID\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"details\\\":\\\"Submits and reserves a new schema\\\",\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}}},\\\"title\\\":\\\"The global schema registry.\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title A struct representing a record for a submitted schema.\\\\n */\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/**\\\\n * @title The global schema registry interface.\\\\n */\\\\ninterface ISchemaRegistry {\\\\n    /**\\\\n     * @dev Emitted when a new schema has been registered\\\\n     *\\\\n     * @param uid The schema UID.\\\\n     * @param registerer The address of the account used to register the schema.\\\\n     */\\\\n    event Registered(bytes32 indexed uid, address registerer);\\\\n\\\\n    /**\\\\n     * @dev Submits and reserves a new schema\\\\n     *\\\\n     * @param schema The schema data schema.\\\\n     * @param resolver An optional schema resolver.\\\\n     * @param revocable Whether the schema allows revocations explicitly.\\\\n     *\\\\n     * @return The UID of the new schema.\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing schema by UID\\\\n     *\\\\n     * @param uid The UID of the schema to retrieve.\\\\n     *\\\\n     * @return The schema data members.\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef47e449dd02bd034e26b1dea505ce533906f8462fc674c938ed0e872a68d640\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Types.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The global schema registry.\\\\n */\\\\ncontract SchemaRegistry is ISchemaRegistry {\\\\n    error AlreadyExists();\\\\n\\\\n    // The version of the contract.\\\\n    string public constant VERSION = \\\\\\\"0.26\\\\\\\";\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /**\\\\n     * @inheritdoc ISchemaRegistry\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc ISchemaRegistry\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Calculates a UID for a given schema.\\\\n     *\\\\n     * @param schemaRecord The input schema.\\\\n     *\\\\n     * @return schema UID.\\\\n     */\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x11ca856573f1b53530d27d40b0a5629a5c591957e221a1b4b8eae2b2053f168b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Types.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n/**\\\\n * @dev A struct representing EIP712 signature data.\\\\n */\\\\nstruct EIP712Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing a single attestation.\\\\n */\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x547096b5cb7bfad9591bdc520705f8110534cd040ed0f7a0ba8d83ea4a565b45\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The interface of an optional schema resolver.\\\\n */\\\\ninterface ISchemaResolver {\\\\n    /**\\\\n     * @dev Returns whether the resolver supports ETH transfers.\\\\n     */\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation and verifies whether it's valid.\\\\n     *\\\\n     * @param attestation The new attestation.\\\\n     *\\\\n     * @return Whether the attestation is valid.\\\\n     */\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes multiple attestations and verifies whether they are valid.\\\\n     *\\\\n     * @param attestations The new attestations.\\\\n     * @param values Explicit ETH amounts which were sent with each attestation.\\\\n     *\\\\n     * @return Whether all the attestations are valid.\\\\n     */\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation revocation and verifies if it can be revoked.\\\\n     *\\\\n     * @param attestation The existing attestation to be revoked.\\\\n     *\\\\n     * @return Whether the attestation can be revoked.\\\\n     */\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes revocation of multiple attestation and verifies they can be revoked.\\\\n     *\\\\n     * @param attestations The existing attestations to be revoked.\\\\n     * @param values Explicit ETH amounts which were sent with each revocation.\\\\n     *\\\\n     * @return Whether the attestations can be revoked.\\\\n     */\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0f3a75c28cdb91fa9227a6eef183379ecea2b6bf38db52795b5c4e6af79299e8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\",\n  \"deployedBytecode\": \"0x60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address)\": {\n        \"details\": \"Emitted when a new schema has been registered\",\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"details\": \"Returns an existing schema by UID\",\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"details\": \"Submits and reserves a new schema\",\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      }\n    },\n    \"title\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5366,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)5313_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)5553\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)5313_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)5313_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)5313_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 5305,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5308,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)5553\"\n          },\n          {\n            \"astId\": 5310,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 5312,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-one/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-one/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-one/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61016034620001b657601f62004fdb38819003918201601f19168301926001600160401b0392909183851183861017620001a0578160209284926040978852833981010312620001b657516001600160a01b03811692838203620001b6578051926200006b84620001bb565b6004845260208401631817191b60e11b81526003602084516200008e81620001bb565b828152016245415360e81b81522094519020948460e052610100958087524660a052835160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f978884528683015260608201524660808201523060a082015260a0815260c081019381851090851117620001a0578385525190206080523060c052610120948552156200019157506101409182525191614e039384620001d8853960805184614892015260a0518461494d015260c05184614863015260e051846148e101525183614907015251826148be01525181818161028601528181610ab4015281816110b801528181612b5e0152818161324c01526134ca0152f35b6311a1e69760e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620001a05760405256fe61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b60e0526110678261295c565b602060e05101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d576000608052611737575b506080515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60c0526000915b83831061113f5761112b3460c05160a05160805161376d565b60e0515260206102fb8160e05101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060805101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560c0516122bd565b528261158585602060e05101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b608052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-one/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/.chainId",
    "content": "421614\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/.migrations.json",
    "content": "{\n  \"000001-registry\": 1737155407,\n  \"000002-eas\": 1737155413,\n  \"000003-register-initial-schemas\": 1737155813\n}"
  },
  {
    "path": "deployments/arbitrum-sepolia/EAS.json",
    "content": "{\n  \"address\": \"0x2521021fc8BF070473E1e1801D3c7B4aB701E1dE\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressInsufficientBalance\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"FailedInnerCall\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4fe62e6b6f349216d5e758a2545acc3a4bbf1fb2fd0ceb294252e60c48bb1e8c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xB5329D38C03a9ad03eDD9792888Dc14CE5915d2C\",\n    \"contractAddress\": \"0x2521021fc8BF070473E1e1801D3c7B4aB701E1dE\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"4151693\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x5ef14739d607628d862e70d520c4e987b9848e5f63286a4e7f74b376faa0ea40\",\n    \"transactionHash\": \"0x4fe62e6b6f349216d5e758a2545acc3a4bbf1fb2fd0ceb294252e60c48bb1e8c\",\n    \"logs\": [],\n    \"blockNumber\": 115538801,\n    \"cumulativeGasUsed\": \"4151693\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x45CB6Fa0870a8Af06796Ac15915619a0f22cd475\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressInsufficientBalance\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"FailedInnerCall\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"AddressInsufficientBalance(address)\\\":[{\\\"details\\\":\\\"The ETH balance of the account is not enough to perform the operation.\\\"}],\\\"FailedInnerCall()\\\":[{\\\"details\\\":\\\"A call to an address target failed. The target may have reverted.\\\"}]},\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID of the new attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x60d59e039e6ec40887e8a946f516b55997d689212c44a89f434119535dd9a3c4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"./../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x590977110db1256cc00416bdf74eb8264a0eda358ccded303610369a2930b614\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\\\n     */\\\\n    error AddressInsufficientBalance(address account);\\\\n\\\\n    /**\\\\n     * @dev There's no code at `target` (it is not a contract).\\\\n     */\\\\n    error AddressEmptyCode(address target);\\\\n\\\\n    /**\\\\n     * @dev A call to an address target failed. The target may have reverted.\\\\n     */\\\\n    error FailedInnerCall();\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        if (address(this).balance < amount) {\\\\n            revert AddressInsufficientBalance(address(this));\\\\n        }\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        if (!success) {\\\\n            revert FailedInnerCall();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\\\n     * up by this function (like regular Solidity function calls). However, if\\\\n     * the call reverted with no returned reason, this function reverts with a\\\\n     * {FailedInnerCall} error.\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        if (address(this).balance < value) {\\\\n            revert AddressInsufficientBalance(address(this));\\\\n        }\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\\\n     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\\\\n     * unsuccessful call.\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata\\\\n    ) internal view returns (bytes memory) {\\\\n        if (!success) {\\\\n            _revert(returndata);\\\\n        } else {\\\\n            // only check if target is a contract if the call was successful and the return data is empty\\\\n            // otherwise we already know that it was a contract\\\\n            if (returndata.length == 0 && target.code.length == 0) {\\\\n                revert AddressEmptyCode(target);\\\\n            }\\\\n            return returndata;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\\\n     * revert reason or with a default {FailedInnerCall} error.\\\\n     */\\\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\\\n        if (!success) {\\\\n            _revert(returndata);\\\\n        } else {\\\\n            return returndata;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\\\\n     */\\\\n    function _revert(bytes memory returndata) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert FailedInnerCall();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {ECDSA} from \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport {IERC1271} from \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Safe Wallet (previously Gnosis Safe).\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6b11eb41a228cca35d4b662b4df69fcd75192851365102690f57b2ac01e83fe6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051614e58380380614e58833981016040819052610030916101f3565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c081905290919082908290610088908390610179565b61018052610097816001610179565b6101a0528151602080840191909120610140528151908201206101605246610100526101276101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e05250503061012052600261013d83826102c2565b5050506001600160a01b038116610167576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c0526103f2565b60006020835110156101955761018e836101ac565b90506101a6565b816101a084826102c2565b5060ff90505b92915050565b600080829050601f815111156101e0578260405163305a27a960e01b81526004016101d79190610380565b60405180910390fd5b80516101eb826103ce565b179392505050565b60006020828403121561020557600080fd5b81516001600160a01b038116811461021c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061024d57607f821691505b60208210810361026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bd57806000526020600020601f840160051c8101602085101561029a5750805b601f840160051c820191505b818110156102ba57600081556001016102a6565b50505b505050565b81516001600160401b038111156102db576102db610223565b6102ef816102e98454610239565b84610273565b6020601f821160018114610323576000831561030b5750848201515b600019600385901b1c1916600184901b1784556102ba565b600084815260208120601f198516915b828110156103535787850151825560209485019460019092019101610333565b50848210156103715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156103ae5760208186018101516040868401015201610391565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561026d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149d261048660003960008181610538015281816115c10152611ef901526000612824015260006127f70152600061293101526000612909015260006128640152600061288e015260006128b801526000610c3401526000610c0b01526000610be201526149d26000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"AddressInsufficientBalance(address)\": [\n        {\n          \"details\": \"The ETH balance of the account is not enough to perform the operation.\"\n        }\n      ],\n      \"FailedInnerCall()\": [\n        {\n          \"details\": \"A call to an address target failed. The target may have reverted.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID of the new attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3169,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3173,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 155,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)49_storage)\"\n      },\n      {\n        \"astId\": 159,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 165,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)49_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)49_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)49_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 30,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 32,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 34,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 36,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 38,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 40,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 42,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 44,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 46,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 48,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-sepolia/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x8E807011c16E538B2dEEf1dc652EFe7724E09397\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb3d25d741f02fb08ff1356e64e0e49c00e530ba97a2b29f660b9b1ab67fd4f52\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xB5329D38C03a9ad03eDD9792888Dc14CE5915d2C\",\n    \"contractAddress\": \"0x8E807011c16E538B2dEEf1dc652EFe7724E09397\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2297956\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x3d211e38c5d20fa4156b79fca28bca3c46db2c4806326a4ff5f6198af8853c56\",\n    \"transactionHash\": \"0xb3d25d741f02fb08ff1356e64e0e49c00e530ba97a2b29f660b9b1ab67fd4f52\",\n    \"logs\": [],\n    \"blockNumber\": 115541100,\n    \"cumulativeGasUsed\": \"2297956\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x2521021fc8BF070473E1e1801D3c7B4aB701E1dE\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\\\\\"1.4.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != request.revoker) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3573,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 3581,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-sepolia/Indexer.json",
    "content": "{\n  \"address\": \"0x501D6d86240De5A57E91414356ad4B1778F0AB18\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x27b5c81214899c2d5aa10bdfa54beff6fd062b355ee8957d23109e1232597581\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xB5329D38C03a9ad03eDD9792888Dc14CE5915d2C\",\n    \"contractAddress\": \"0x501D6d86240De5A57E91414356ad4B1778F0AB18\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"989748\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x883d3b86e91495bbab439a4ddb5eb89aa41be16f14551dfd45abe68b684c3cc2\",\n    \"transactionHash\": \"0x27b5c81214899c2d5aa10bdfa54beff6fd062b355ee8957d23109e1232597581\",\n    \"logs\": [],\n    \"blockNumber\": 115541109,\n    \"cumulativeGasUsed\": \"1019415\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x2521021fc8BF070473E1e1801D3c7B4aB701E1dE\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2421,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2428,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 2442,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 2446,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-sepolia/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x45CB6Fa0870a8Af06796Ac15915619a0f22cd475\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x07fdd6ca0fe47b03d651687e29da6d1cc56c2c2cacfb8bd2188da94e40b062cf\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xB5329D38C03a9ad03eDD9792888Dc14CE5915d2C\",\n    \"contractAddress\": \"0x45CB6Fa0870a8Af06796Ac15915619a0f22cd475\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"641922\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x56e26508281a58388341a18cdb9bddaf4a2aaad2b9fa079d9d3f93b2fa915a99\",\n    \"transactionHash\": \"0x07fdd6ca0fe47b03d651687e29da6d1cc56c2c2cacfb8bd2188da94e40b062cf\",\n    \"logs\": [],\n    \"blockNumber\": 115538779,\n    \"cumulativeGasUsed\": \"932919\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x03ba24da8053a6ace797cd2683971b4f4a55909adbb3928c57d9864b71ff0a56\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e0604052348015600f57600080fd5b506001608052600360a052600060c05260805160a05160c051610ab561004b600039600060fe0152600060d50152600060ac0152610ab56000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2959,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)2343_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)4381\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)2343_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)2343_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)2343_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 2335,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 2338,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)4381\"\n          },\n          {\n            \"astId\": 2340,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 2342,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EAS,\n  EASInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051614e58380380614e58833981016040819052610030916101f3565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c081905290919082908290610088908390610179565b61018052610097816001610179565b6101a0528151602080840191909120610140528151908201206101605246610100526101276101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e05250503061012052600261013d83826102c2565b5050506001600160a01b038116610167576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c0526103f2565b60006020835110156101955761018e836101ac565b90506101a6565b816101a084826102c2565b5060ff90505b92915050565b600080829050601f815111156101e0578260405163305a27a960e01b81526004016101d79190610380565b60405180910390fd5b80516101eb826103ce565b179392505050565b60006020828403121561020557600080fd5b81516001600160a01b038116811461021c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061024d57607f821691505b60208210810361026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bd57806000526020600020601f840160051c8101602085101561029a5750805b601f840160051c820191505b818110156102ba57600081556001016102a6565b50505b505050565b81516001600160401b038111156102db576102db610223565b6102ef816102e98454610239565b84610273565b6020601f821160018114610323576000831561030b5750848201515b600019600385901b1c1916600184901b1784556102ba565b600084815260208120601f198516915b828110156103535787850151825560209485019460019092019101610333565b50848210156103715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156103ae5760208186018101516040868401015201610391565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561026d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149d261048660003960008181610538015281816115c10152611ef901526000612824015260006127f70152600061293101526000612909015260006128640152600061288e015260006128b801526000610c3401526000610c0b01526000610be201526149d26000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081b000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  Indexer,\n  IndexerInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e0604052348015600f57600080fd5b506001608052600360a052600060c05260805160a05160c051610ab561004b600039600060fe0152600060d50152600060ac0152610ab56000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081b000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/arbitrum-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/base/.chainId",
    "content": "8453\n"
  },
  {
    "path": "deployments/base/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1694192651,\n  \"000004-name-initial-schemas\": 1694192936,\n  \"000005-eip712-proxy\": 1698793201,\n  \"000006-indexer\": 1698793220\n}"
  },
  {
    "path": "deployments/base/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/base/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xF095fE4b23958b08D38e52d5d5674bBF0C03cbF6\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x405d62d8408b41edf4a0bc722f1e4e30d9e5b22dbf8552055ec5621f09dffa54\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xF095fE4b23958b08D38e52d5d5674bBF0C03cbF6\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2300182\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x84fb79d64cb23647c39208923d79096481cf7d287eb2b2df262acd19b7b65461\",\n    \"transactionHash\": \"0x405d62d8408b41edf4a0bc722f1e4e30d9e5b22dbf8552055ec5621f09dffa54\",\n    \"logs\": [],\n    \"blockNumber\": 6001927,\n    \"cumulativeGasUsed\": \"2347095\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7337,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7341,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7345,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/base/Indexer.json",
    "content": "{\n  \"address\": \"0x37AC6006646f2e687B7fB379F549Dc7634dF5b84\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x46096cd41c3fc780d2b4bb4e290ff0e8b6d566e35c301c2e9df166755c41e987\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x37AC6006646f2e687B7fB379F549Dc7634dF5b84\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"980549\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x88a877626d25188c6612cdd55f7f006578cbfc343e17a8ea7fd857278269d80c\",\n    \"transactionHash\": \"0x46096cd41c3fc780d2b4bb4e290ff0e8b6d566e35c301c2e9df166755c41e987\",\n    \"logs\": [],\n    \"blockNumber\": 6001934,\n    \"cumulativeGasUsed\": \"1073753\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 2, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schema) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schema) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(_schemaAttesterRecipientAttestations[schema][attester][recipient], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schema][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schema) external view returns (uint256) {\\\\n        return _schemaAttestations[schema].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schema = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schema].push(attestationUID);\\\\n        _receivedAttestations[recipient][schema].push(attestationUID);\\\\n        _sentAttestations[attester][schema].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schema][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c0f19a79712ee67248f0f0d3f343daf4281da31ffa6319c67c8a7af38a660b0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6193,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6200,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6209,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6214,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/base/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/base/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schema: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/base/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/base/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/base/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/base-goerli/.chainId",
    "content": "84531"
  },
  {
    "path": "deployments/base-goerli/.migrations.json",
    "content": "{\n  \"000001-registry\": 1684880484,\n  \"000002-eas\": 1684880493,\n  \"000003-register-initial-schemas\": 1697138912,\n  \"000004-name-initial-schemas\": 1697139184,\n  \"000005-eip712-proxy\": 1697139190,\n  \"000006-indexer\": 1698798154,\n  \"000100-test-seed\": 1697229391\n}\n"
  },
  {
    "path": "deployments/base-goerli/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/base-goerli/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x37AC6006646f2e687B7fB379F549Dc7634dF5b84\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x1ed4eac27a9188d12cfb2fa48b9fada01a0ac8468c0f99a7237445bfade5d6a4\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x37AC6006646f2e687B7fB379F549Dc7634dF5b84\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"2300182\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xe186491cc985a1a8f09167c44552f205dd4c63035eead5dd320da5e7a96bc3b7\",\n    \"transactionHash\": \"0x1ed4eac27a9188d12cfb2fa48b9fada01a0ac8468c0f99a7237445bfade5d6a4\",\n    \"logs\": [],\n    \"blockNumber\": 10972785,\n    \"cumulativeGasUsed\": \"2389035\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6788,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6792,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 6796,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/base-goerli/Indexer.json",
    "content": "{\n  \"address\": \"0xE0893F47009776D6aEC3De8455Cb0ed325Eea74a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x40d42353b701ee5311919fbd85c9bbcfbd33a00166e7e647774615698a375bf2\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xE0893F47009776D6aEC3De8455Cb0ed325Eea74a\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"980549\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xbae071a86ea13376a2e5890a3cc4cfd059c07025e9c99a4a6222b6e12ea4633a\",\n    \"transactionHash\": \"0x40d42353b701ee5311919fbd85c9bbcfbd33a00166e7e647774615698a375bf2\",\n    \"logs\": [],\n    \"blockNumber\": 11802267,\n    \"cumulativeGasUsed\": \"1060435\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 2, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schema) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schema) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(_schemaAttesterRecipientAttestations[schema][attester][recipient], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schema][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schema) external view returns (uint256) {\\\\n        return _schemaAttestations[schema].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schema = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schema].push(attestationUID);\\\\n        _receivedAttestations[recipient][schema].push(attestationUID);\\\\n        _sentAttestations[attester][schema].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schema][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c0f19a79712ee67248f0f0d3f343daf4281da31ffa6319c67c8a7af38a660b0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6193,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6200,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6209,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6214,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/base-goerli/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getName()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getName(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getName(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getName(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getName(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getName(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schema: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101606040523480156200001257600080fd5b50604051620043cc380380620043cc83398101604081905262000035916200015b565b604080518082018252600381526245415360e81b6020808301918252835180850185526004815263302e323760e01b81830152835190922060e08190527f2be123d7d25e2a214dd01de409c0c206b6a5cf2b3b7b0350b53cba0d658819926101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a01959095526060810193909352608080840192909252308382018190528851808503909201825260c09384019098528051940193909320909252939052610120929092529060006200011d838262000232565b5050506001600160a01b03811662000148576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b031661014052620002fe565b6000602082840312156200016e57600080fd5b81516001600160a01b03811681146200018657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b857607f821691505b602082108103620001d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022d57600081815260208120601f850160051c81016020861015620002085750805b601f850160051c820191505b81811015620002295782815560010162000214565b5050505b505050565b81516001600160401b038111156200024e576200024e6200018d565b62000266816200025f8454620001a3565b84620001df565b602080601f8311600181146200029e5760008415620002855750858301515b600019600386901b1c1916600185901b17855562000229565b600085815260208120601f198616915b82811015620002cf57888601518255948401946001909101908401620002ae565b5085821015620002ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161406562000367600039600081816104c5015281816112a50152611a42015260006123cb0152600061241a015260006123f50152600061234e01526000612378015260006123a201526140656000f3fe6080604052600436106101805760003560e01c8063b83010d3116100d6578063e57a6b1b1161007f578063f10b5cc811610059578063f10b5cc81461049e578063f17325e7146104ef578063ffa1ad741461050257600080fd5b8063e57a6b1b14610456578063e71ff36514610469578063ed24911d1461048957600080fd5b8063e13458fc116100b0578063e13458fc146103f1578063e30bb56314610404578063e45d03f91461044357600080fd5b8063b83010d314610367578063cf190f341461039a578063d45c4435146103ba57600080fd5b80634692626711610138578063831e05a111610112578063831e05a1146102cd578063a3112a64146102e0578063b469318d1461030d57600080fd5b806346926267146102855780634cb7e9e51461029a5780634d003070146102ad57600080fd5b806317d7de7c1161016957806317d7de7c146102005780632d0335ab1461022257806344adc90e1461026557600080fd5b806312b11a171461018557806313893f61146101c7575b600080fd5b34801561019157600080fd5b507fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de615b6040519081526020015b60405180910390f35b3480156101d357600080fd5b506101e76101e2366004613094565b61054b565b60405167ffffffffffffffff90911681526020016101be565b34801561020c57600080fd5b50610215610590565b6040516101be9190613144565b34801561022e57600080fd5b506101b461023d366004613190565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b610278610273366004613094565b610622565b6040516101be91906131ad565b6102986102933660046131f1565b610753565b005b6102986102a8366004613094565b6107d7565b3480156102b957600080fd5b506101e76102c8366004613209565b6108b9565b6102786102db366004613094565b6108c6565b3480156102ec57600080fd5b506103006102fb366004613209565b610b11565b6040516101be9190613309565b34801561031957600080fd5b506101e761032836600461331c565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460209081526040808320938352929052205467ffffffffffffffff1690565b34801561037357600080fd5b507fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996506101b4565b3480156103a657600080fd5b506101e76103b5366004613209565b610cd0565b3480156103c657600080fd5b506101e76103d5366004613209565b60009081526003602052604090205467ffffffffffffffff1690565b6101b46103ff366004613348565b610cde565b34801561041057600080fd5b5061043361041f366004613209565b600090815260026020526040902054151590565b60405190151581526020016101be565b610298610451366004613094565b610de1565b610298610464366004613383565b610f56565b34801561047557600080fd5b506101e7610484366004613094565b610ffb565b34801561049557600080fd5b506101b4611033565b3480156104aa57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101be565b6101b46104fd366004613395565b611042565b34801561050e57600080fd5b506102156040518060400160405280600481526020017f302e32370000000000000000000000000000000000000000000000000000000081525081565b60004282825b818110156105845761057c3387878481811061056f5761056f6133d0565b9050602002013585611100565b600101610551565b50909150505b92915050565b60606000805461059f906133ff565b80601f01602080910402602001604051908101604052809291908181526020018280546105cb906133ff565b80156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b5050505050905090565b606060008267ffffffffffffffff81111561063f5761063f61344c565b60405190808252806020026020018201604052801561067257816020015b606081526020019060019003908161065d5790505b509050600034815b8581101561073e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86018114368888848181106106ba576106ba6133d0565b90506020028101906106cc919061347b565b905060006106f382356106e260208501856134b9565b6106eb91613732565b3388876111ff565b805190915061070290866137a6565b9450806020015187858151811061071b5761071b6133d0565b60200260200101819052508060200151518601955083600101935050505061067a565b50610749838361192c565b9695505050505050565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161076a5790505090506107a53683900383016020840161382f565b816000815181106107b8576107b86133d0565b60209081029190910101526107d2823582333460016119f9565b505050565b3460005b828110156108b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181143685858481811061081b5761081b6133d0565b905060200281019061082d919061347b565b905061089a8135610841602084018461384b565b808060200260200160405190810160405280939291908181526020016000905b8282101561088d5761087e6040830286013681900381019061382f565b81526020019060010190610861565b50505050503387866119f9565b6108a490856137a6565b935082600101925050506107db565b50505050565b60004261058a8382612055565b606060008267ffffffffffffffff8111156108e3576108e361344c565b60405190808252806020026020018201604052801561091657816020015b60608152602001906001900390816109015790505b509050600034815b8581101561073e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181143688888481811061095e5761095e6133d0565b905060200281019061097091906138b3565b905036600061098260208401846134b9565b90925090508015806109a2575061099c60408401846138e7565b82141590505b156109d9576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a9b57610a93604051806080016040528086600001358152602001858585818110610a0e57610a0e6133d0565b9050602002810190610a20919061394e565b610a2990613982565b8152602001610a3b60408801886138e7565b85818110610a4b57610a4b6133d0565b905060600201803603810190610a6191906139f9565b8152602001610a766080880160608901613190565b73ffffffffffffffffffffffffffffffffffffffff169052612117565b6001016109dc565b506000610ac48435610aad8486613732565b610abd6080880160608901613190565b8a896111ff565b8051909150610ad390886137a6565b96508060200151898781518110610aec57610aec6133d0565b602002602001018190525080602001515188019750856001019550505050505061091e565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820192909252610120810191909152600082815260026020818152604092839020835161014081018552815481526001820154928101929092529182015467ffffffffffffffff808216948301949094526801000000000000000081048416606083015270010000000000000000000000000000000090049092166080830152600381015460a0830152600481015473ffffffffffffffffffffffffffffffffffffffff90811660c0840152600582015490811660e084015274010000000000000000000000000000000000000000900460ff16151561010083015260068101805461012084019190610c47906133ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610c73906133ff565b8015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050815250509050919050565b60004261058a338483611100565b6000610cf1610cec83613a15565b612117565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d08579050509050610d76602084018461394e565b610d7f90613982565b81600081518110610d9257610d926133d0565b6020908102919091010152610dbb833582610db360c0870160a08801613190565b3460016111ff565b60200151600081518110610dd157610dd16133d0565b6020026020010151915050919050565b3460005b828110156108b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181146000858584818110610e2657610e266133d0565b9050602002810190610e3891906138b3565b610e4190613afa565b60208101518051919250901580610e5e5750816040015151815114155b15610e95576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8151811015610f2657610f1e604051806080016040528085600001518152602001848481518110610ecb57610ecb6133d0565b6020026020010151815260200185604001518481518110610eee57610eee6133d0565b60200260200101518152602001856060015173ffffffffffffffffffffffffffffffffffffffff168152506122a6565b600101610e98565b50610f3c826000015182846060015188876119f9565b610f4690866137a6565b9450836001019350505050610de5565b610f6d610f6836839003830183613bd9565b6122a6565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610f84579050509050610fbf3683900383016020840161382f565b81600081518110610fd257610fd26133d0565b60209081029190910101526107d2823582610ff360e0860160c08701613190565b3460016119f9565b60004282825b818110156105845761102b86868381811061101e5761101e6133d0565b9050602002013584612055565b600101611001565b600061103d612334565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161105c5790505090506110ca602084018461394e565b6110d390613982565b816000815181106110e6576110e66133d0565b6020908102919091010152610dbb833582333460016111ff565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460209081526040808320858452918290529091205467ffffffffffffffff1615611174576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff8111156112445761124461344c565b60405190808252806020026020018201604052801561126d578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611301573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113479190810190613c35565b8051909150611382576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561139d5761139d61344c565b60405190808252806020026020018201604052801561143c57816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816113bb5790505b50905060008467ffffffffffffffff81111561145a5761145a61344c565b604051908082528060200260200182016040528015611483578160200160208202803683370190505b50905060005b8581101561190b5760008b82815181106114a5576114a56133d0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff16141580156114f057504267ffffffffffffffff16816020015167ffffffffffffffff1611155b15611527576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561153a575080604001515b15611571576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016115954290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6116378382612468565b600081815260026020526040902054909250156116565760010161162d565b818352600082815260026020818152604092839020865181559086015160018201559185015190820180546060870151608088015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0840151600382015560c084015160048201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906117d59082613d5b565b50505060608401511561182c57606084015160009081526002602052604090205461182c576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061183f5761183f6133d0565b60200260200101819052508360a00151868681518110611861576118616133d0565b6020026020010181815250508189602001518681518110611884576118846133d0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35856040516118f491815260200190565b60405180910390a484600101945050505050611489565b5061191b83838360008c8c6124c7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156119495761194961344c565b604051908082528060200260200182016040528015611972578160200160208202803683370190505b5090506000805b8551811015610584576000868281518110611996576119966133d0565b6020026020010151905060005b81518110156119ef578181815181106119be576119be6133d0565b60200260200101518585815181106119d8576119d86133d0565b6020908102919091010152600193840193016119a3565b5050600101611979565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611acf9190810190613c35565b8051909150611b0a576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff811115611b2757611b2761344c565b604051908082528060200260200182016040528015611bc657816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611b455790505b50905060008267ffffffffffffffff811115611be457611be461344c565b604051908082528060200260200182016040528015611c0d578160200160208202803683370190505b50905060005b838110156120375760008a8281518110611c2f57611c2f6133d0565b6020908102919091018101518051600090815260029092526040909120805491925090611c88576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611cc5576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c8116911614611d1b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611d71576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611dcb576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611ed7906133ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611f03906133ff565b8015611f505780601f10611f2557610100808354040283529160200191611f50565b820191906000526020600020905b815481529060010190602001808311611f3357829003601f168201915b505050505081525050858481518110611f6b57611f6b6133d0565b60200260200101819052508160200151848481518110611f8d57611f8d6133d0565b60200260200101818152505080600101548b73ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615856000015160405161202591815260200190565b60405180910390a45050600101611c13565b5061204784838360018b8b6124c7565b9a9950505050505050505050565b60008281526003602052604090205467ffffffffffffffff16156120a5576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b60208082015160408084015160608086015173ffffffffffffffffffffffffffffffffffffffff1660009081526001808752848220805491820190558751865187890151878901519589015160808a01518051908c01209851999a97999498959761221d97612202977fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de619791939290918c9101978852602088019690965273ffffffffffffffffffffffffffffffffffffffff94909416604087015267ffffffffffffffff9290921660608601521515608085015260a084015260c083015260e08201526101000190565b604051602081830303815290604052805190602001206128a1565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16612252828560000151866020015187604001516128b4565b73ffffffffffffffffffffffffffffffffffffffff161461229f576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60208181015160408084015160608086015173ffffffffffffffffffffffffffffffffffffffff1660009081526001808752848220805491820190558751865186517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996509981019990995295880152918601939093526080850181905292939092919061221d9060a001612202565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561239a57507f000000000000000000000000000000000000000000000000000000000000000046145b156123c457507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b015194516000996124a999989796918c9101613e75565b60405160208183030381529060405280519060200120905092915050565b8451600090600181900361251f5761251788886000815181106124ec576124ec6133d0565b602002602001015188600081518110612507576125076133d0565b60200260200101518888886128dc565b915050610749565b602088015173ffffffffffffffffffffffffffffffffffffffff81166125b15760005b828110156125a55787818151811061255c5761255c6133d0565b602002602001015160001461259d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612542565b50600092505050610749565b6000805b838110156126db5760008982815181106125d1576125d16133d0565b602002602001015190508060001415801561265857508373ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126569190613f53565b155b1561268f576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b878111156126c9576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b968790039691909101906001016125b5565b5086156127b6576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906388e5b2d9908390612738908d908d90600401613f70565b60206040518083038185885af1158015612756573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061277b9190613f53565b6127b1576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612885565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906391db0b7e90839061280c908d908d90600401613f70565b60206040518083038185885af115801561282a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061284f9190613f53565b612885576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84156128945761289486612bf2565b9998505050505050505050565b600061058a6128ae612334565b83612c05565b60008060006128c587878787612c47565b915091506128d281612d36565b5095945050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff8116612941578515612937576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000915050610749565b85158015906129bc57508073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ba9190613f53565b155b156129f3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115612a2d576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393508415612b0a576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890612a8c908b90600401613309565b60206040518083038185885af1158015612aaa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612acf9190613f53565b612b05576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd7565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890612b5e908b90600401613309565b60206040518083038185885af1158015612b7c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba19190613f53565b612bd7576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215612be657612be684612bf2565b50939695505050505050565b8015612c0257612c023382612eee565b50565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101839052604281018290526000906062016124a9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c7e5750600090506003612d2d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cd2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612d2657600060019250925050612d2d565b9150600090505b94509492505050565b6000816004811115612d4a57612d4a614029565b03612d525750565b6001816004811115612d6657612d66614029565b03612dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115612de657612de6614029565b03612e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401612dc9565b6003816004811115612e6157612e61614029565b03612c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401612dc9565b80471015612f58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612dc9565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612fb2576040519150601f19603f3d011682016040523d82523d6000602084013e612fb7565b606091505b50509050806107d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612dc9565b60008083601f84011261305a57600080fd5b50813567ffffffffffffffff81111561307257600080fd5b6020830191508360208260051b850101111561308d57600080fd5b9250929050565b600080602083850312156130a757600080fd5b823567ffffffffffffffff8111156130be57600080fd5b6130ca85828601613048565b90969095509350505050565b60005b838110156130f15781810151838201526020016130d9565b50506000910152565b600081518084526131128160208601602086016130d6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061315760208301846130fa565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114612c0257600080fd5b803561318b8161315e565b919050565b6000602082840312156131a257600080fd5b81356131578161315e565b6020808252825182820181905260009190848201906040850190845b818110156131e5578351835292840192918401916001016131c9565b50909695505050505050565b60006060828403121561320357600080fd5b50919050565b60006020828403121561321b57600080fd5b5035919050565b600061014082518452602083015160208501526040830151613250604086018267ffffffffffffffff169052565b50606083015161326c606086018267ffffffffffffffff169052565b506080830151613288608086018267ffffffffffffffff169052565b5060a083015160a085015260c08301516132ba60c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e08301516132e260e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052610749838701826130fa565b6020815260006131576020830184613222565b6000806040838503121561332f57600080fd5b823561333a8161315e565b946020939093013593505050565b60006020828403121561335a57600080fd5b813567ffffffffffffffff81111561337157600080fd5b820160c0818503121561315757600080fd5b600060e0828403121561320357600080fd5b6000602082840312156133a757600080fd5b813567ffffffffffffffff8111156133be57600080fd5b82016040818503121561315757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061341357607f821691505b602082108103613203577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126134af57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134ee57600080fd5b83018035915067ffffffffffffffff82111561350957600080fd5b6020019150600581901b360382131561308d57600080fd5b60405160c0810167ffffffffffffffff811182821017156135445761354461344c565b60405290565b6040516080810167ffffffffffffffff811182821017156135445761354461344c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135b4576135b461344c565b604052919050565b600067ffffffffffffffff8211156135d6576135d661344c565b5060051b60200190565b8015158114612c0257600080fd5b803561318b816135e0565b600067ffffffffffffffff8211156136135761361361344c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261365057600080fd5b813561366361365e826135f9565b61356d565b81815284602083860101111561367857600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156136a757600080fd5b6136af613521565b905081356136bc8161315e565b8152602082013567ffffffffffffffff80821682146136da57600080fd5b8160208401526136ec604085016135ee565b604084015260608401356060840152608084013591508082111561370f57600080fd5b5061371c8482850161363f565b60808301525060a082013560a082015292915050565b600061374061365e846135bc565b80848252602080830192508560051b85013681111561375e57600080fd5b855b8181101561379a57803567ffffffffffffffff8111156137805760008081fd5b61378c36828a01613695565b865250938201938201613760565b50919695505050505050565b8181038181111561058a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000604082840312156137f257600080fd5b6040516040810181811067ffffffffffffffff821117156138155761381561344c565b604052823581526020928301359281019290925250919050565b60006040828403121561384157600080fd5b61315783836137e0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261388057600080fd5b83018035915067ffffffffffffffff82111561389b57600080fd5b6020019150600681901b360382131561308d57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126134af57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261391c57600080fd5b83018035915067ffffffffffffffff82111561393757600080fd5b602001915060608102360382131561308d57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff418336030181126134af57600080fd5b600061058a3683613695565b6000606082840312156139a057600080fd5b6040516060810181811067ffffffffffffffff821117156139c3576139c361344c565b604052905080823560ff811681146139da57600080fd5b8082525060208301356020820152604083013560408201525092915050565b600060608284031215613a0b57600080fd5b613157838361398e565b600060c08236031215613a2757600080fd5b613a2f61354a565b82358152602083013567ffffffffffffffff811115613a4d57600080fd5b613a5936828601613695565b602083015250613a6c366040850161398e565b604082015260a0830135613a7f8161315e565b606082015292915050565b600082601f830112613a9b57600080fd5b81356020613aab61365e836135bc565b82815260609283028501820192828201919087851115613aca57600080fd5b8387015b85811015613aed57613ae0898261398e565b8452928401928101613ace565b5090979650505050505050565b600060808236031215613b0c57600080fd5b613b1461354a565b8235815260208084013567ffffffffffffffff80821115613b3457600080fd5b9085019036601f830112613b4757600080fd5b8135613b5561365e826135bc565b81815260069190911b83018401908481019036831115613b7457600080fd5b938501935b82851015613b9d57613b8b36866137e0565b82528582019150604085019450613b79565b80868801525050506040860135925080831115613bb957600080fd5b5050613bc736828601613a8a565b604083015250613a7f60608401613180565b600060e08284031215613beb57600080fd5b613bf361354a565b82358152613c0484602085016137e0565b6020820152613c16846060850161398e565b604082015260c0830135613c298161315e565b60608201529392505050565b60006020808385031215613c4857600080fd5b825167ffffffffffffffff80821115613c6057600080fd5b9084019060808287031215613c7457600080fd5b613c7c61354a565b8251815283830151613c8d8161315e565b818501526040830151613c9f816135e0565b6040820152606083015182811115613cb657600080fd5b80840193505086601f840112613ccb57600080fd5b82519150613cdb61365e836135f9565b8281528785848601011115613cef57600080fd5b613cfe838683018787016130d6565b60608201529695505050505050565b601f8211156107d257600081815260208120601f850160051c81016020861015613d345750805b601f850160051c820191505b81811015613d5357828155600101613d40565b505050505050565b815167ffffffffffffffff811115613d7557613d7561344c565b613d8981613d8384546133ff565b84613d0d565b602080601f831160018114613ddc5760008415613da65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613d53565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e2957888601518255948401946001909101908401613e0a565b5085821015613e6557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351613f0e8160798501602088016130d6565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b600060208284031215613f6557600080fd5b8151613157816135e0565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b83811015613fe5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552613fd3868351613222565b95509382019390820190600101613f99565b50508584038187015286518085528782019482019350915060005b8281101561401c57845184529381019392810192600101614000565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561001057600080fd5b506107df806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806360d7a27814610046578063a2ea7c6e1461006c578063ffa1ad741461008c575b600080fd5b6100596100543660046103e6565b6100d5565b6040519081526020015b60405180910390f35b61007f61007a366004610498565b61027e565b604051610063919061051f565b6100c86040518060400160405280600481526020017f302e32370000000000000000000000000000000000000000000000000000000081525081565b6040516100639190610578565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101579050826103a6565b600081815260208190526040902054909150156101a0576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff90921691909117929092179091556060830151839190600282019061023c9082610663565b50506040513381528291507f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c9060200160405180910390a29695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff1615159282019290925260028201805491929160608401919061031d906105c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610349906105c1565b80156103965780601f1061036b57610100808354040283529160200191610396565b820191906000526020600020905b81548152906001019060200180831161037957829003601f168201915b5050505050815250509050919050565b60008160600151826020015183604001516040516020016103c99392919061077d565b604051602081830303815290604052805190602001209050919050565b600080600080606085870312156103fc57600080fd5b843567ffffffffffffffff8082111561041457600080fd5b818701915087601f83011261042857600080fd5b81358181111561043757600080fd5b88602082850101111561044957600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461047857600080fd5b91506040850135801515811461048d57600080fd5b939692955090935050565b6000602082840312156104aa57600080fd5b5035919050565b60005b838110156104cc5781810151838201526020016104b4565b50506000910152565b600081518084526104ed8160208601602086016104b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201526040820151151560608201526000606083015160808084015261057060a08401826104d5565b949350505050565b60208152600061058b60208301846104d5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806105d557607f821691505b60208210810361060e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561065e57600081815260208120601f850160051c8101602086101561063b5750805b601f850160051c820191505b8181101561065a57828155600101610647565b5050505b505050565b815167ffffffffffffffff81111561067d5761067d610592565b6106918161068b84546105c1565b84610614565b602080601f8311600181146106e457600084156106ae5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561065a565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561073157888601518255948401946001909101908401610712565b508582101561076d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000845161078f8184602089016104b1565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/base-goerli/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/base-sepolia/.chainId",
    "content": "84532\n"
  },
  {
    "path": "deployments/base-sepolia/.migrations.json",
    "content": "{\n  \"000001-registry\": 1684880484,\n  \"000002-eas\": 1684880493,\n  \"000003-register-initial-schemas\": 1706273944,\n  \"000004-name-initial-schemas\": 1706274209,\n  \"000005-eip712-proxy\": 1706274215,\n  \"000006-indexer\": 1706274220,\n  \"000100-test-seed\": 1706274304\n}"
  },
  {
    "path": "deployments/base-sepolia/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/base-sepolia/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xAd64A04c20dDBbA7cBb0EcAe4823095B4adA5c57\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x3613403b685b598c9de73cdc53882723da57f4fd5f7b384de7cd1afd52fa8bb6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x32042fbd27cf766b08603127Fb66B93052a7a886\",\n    \"contractAddress\": \"0xAd64A04c20dDBbA7cBb0EcAe4823095B4adA5c57\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2309831\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xe073f5dd035a366e44cf3dcaf6278eeb25d6f60199408ee78cb8ec4b03a3ce8b\",\n    \"transactionHash\": \"0x3613403b685b598c9de73cdc53882723da57f4fd5f7b384de7cd1afd52fa8bb6\",\n    \"logs\": [],\n    \"blockNumber\": 5252962,\n    \"cumulativeGasUsed\": \"2356732\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 1947,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 1949,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6751,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6755,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 6759,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/base-sepolia/Indexer.json",
    "content": "{\n  \"address\": \"0x2C7BCE69D5Ee84EF73CC9286416F68E60F9A61b3\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x2fcd2a02e3621405d531deb0d7685c3e03954fbec17828dcbd842f324418ecdf\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x32042fbd27cf766b08603127Fb66B93052a7a886\",\n    \"contractAddress\": \"0x2C7BCE69D5Ee84EF73CC9286416F68E60F9A61b3\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"980835\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x3208f05541ba1cf8e6d3051825c739764f0f19a1e213280ec3de26b5a3fd3f7e\",\n    \"transactionHash\": \"0x2fcd2a02e3621405d531deb0d7685c3e03954fbec17828dcbd842f324418ecdf\",\n    \"logs\": [],\n    \"blockNumber\": 5252965,\n    \"cumulativeGasUsed\": \"1027736\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5599,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 5606,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 5615,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 5620,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 5624,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/base-sepolia/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getName()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getName(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getName(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getName(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getName(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getName(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101606040523480156200001257600080fd5b50604051620043cc380380620043cc83398101604081905262000035916200015b565b604080518082018252600381526245415360e81b6020808301918252835180850185526004815263302e323760e01b81830152835190922060e08190527f2be123d7d25e2a214dd01de409c0c206b6a5cf2b3b7b0350b53cba0d658819926101008190524660a081815287517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818a01959095526060810193909352608080840192909252308382018190528851808503909201825260c09384019098528051940193909320909252939052610120929092529060006200011d838262000232565b5050506001600160a01b03811662000148576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b031661014052620002fe565b6000602082840312156200016e57600080fd5b81516001600160a01b03811681146200018657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b857607f821691505b602082108103620001d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022d57600081815260208120601f850160051c81016020861015620002085750805b601f850160051c820191505b81811015620002295782815560010162000214565b5050505b505050565b81516001600160401b038111156200024e576200024e6200018d565b62000266816200025f8454620001a3565b84620001df565b602080601f8311600181146200029e5760008415620002855750858301515b600019600386901b1c1916600185901b17855562000229565b600085815260208120601f198616915b82811015620002cf57888601518255948401946001909101908401620002ae565b5085821015620002ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161406562000367600039600081816104c5015281816112a50152611a42015260006123cb0152600061241a015260006123f50152600061234e01526000612378015260006123a201526140656000f3fe6080604052600436106101805760003560e01c8063b83010d3116100d6578063e57a6b1b1161007f578063f10b5cc811610059578063f10b5cc81461049e578063f17325e7146104ef578063ffa1ad741461050257600080fd5b8063e57a6b1b14610456578063e71ff36514610469578063ed24911d1461048957600080fd5b8063e13458fc116100b0578063e13458fc146103f1578063e30bb56314610404578063e45d03f91461044357600080fd5b8063b83010d314610367578063cf190f341461039a578063d45c4435146103ba57600080fd5b80634692626711610138578063831e05a111610112578063831e05a1146102cd578063a3112a64146102e0578063b469318d1461030d57600080fd5b806346926267146102855780634cb7e9e51461029a5780634d003070146102ad57600080fd5b806317d7de7c1161016957806317d7de7c146102005780632d0335ab1461022257806344adc90e1461026557600080fd5b806312b11a171461018557806313893f61146101c7575b600080fd5b34801561019157600080fd5b507fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de615b6040519081526020015b60405180910390f35b3480156101d357600080fd5b506101e76101e2366004613094565b61054b565b60405167ffffffffffffffff90911681526020016101be565b34801561020c57600080fd5b50610215610590565b6040516101be9190613144565b34801561022e57600080fd5b506101b461023d366004613190565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b610278610273366004613094565b610622565b6040516101be91906131ad565b6102986102933660046131f1565b610753565b005b6102986102a8366004613094565b6107d7565b3480156102b957600080fd5b506101e76102c8366004613209565b6108b9565b6102786102db366004613094565b6108c6565b3480156102ec57600080fd5b506103006102fb366004613209565b610b11565b6040516101be9190613309565b34801561031957600080fd5b506101e761032836600461331c565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460209081526040808320938352929052205467ffffffffffffffff1690565b34801561037357600080fd5b507fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996506101b4565b3480156103a657600080fd5b506101e76103b5366004613209565b610cd0565b3480156103c657600080fd5b506101e76103d5366004613209565b60009081526003602052604090205467ffffffffffffffff1690565b6101b46103ff366004613348565b610cde565b34801561041057600080fd5b5061043361041f366004613209565b600090815260026020526040902054151590565b60405190151581526020016101be565b610298610451366004613094565b610de1565b610298610464366004613383565b610f56565b34801561047557600080fd5b506101e7610484366004613094565b610ffb565b34801561049557600080fd5b506101b4611033565b3480156104aa57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101be565b6101b46104fd366004613395565b611042565b34801561050e57600080fd5b506102156040518060400160405280600481526020017f302e32370000000000000000000000000000000000000000000000000000000081525081565b60004282825b818110156105845761057c3387878481811061056f5761056f6133d0565b9050602002013585611100565b600101610551565b50909150505b92915050565b60606000805461059f906133ff565b80601f01602080910402602001604051908101604052809291908181526020018280546105cb906133ff565b80156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b5050505050905090565b606060008267ffffffffffffffff81111561063f5761063f61344c565b60405190808252806020026020018201604052801561067257816020015b606081526020019060019003908161065d5790505b509050600034815b8581101561073e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86018114368888848181106106ba576106ba6133d0565b90506020028101906106cc919061347b565b905060006106f382356106e260208501856134b9565b6106eb91613732565b3388876111ff565b805190915061070290866137a6565b9450806020015187858151811061071b5761071b6133d0565b60200260200101819052508060200151518601955083600101935050505061067a565b50610749838361192c565b9695505050505050565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161076a5790505090506107a53683900383016020840161382f565b816000815181106107b8576107b86133d0565b60209081029190910101526107d2823582333460016119f9565b505050565b3460005b828110156108b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181143685858481811061081b5761081b6133d0565b905060200281019061082d919061347b565b905061089a8135610841602084018461384b565b808060200260200160405190810160405280939291908181526020016000905b8282101561088d5761087e6040830286013681900381019061382f565b81526020019060010190610861565b50505050503387866119f9565b6108a490856137a6565b935082600101925050506107db565b50505050565b60004261058a8382612055565b606060008267ffffffffffffffff8111156108e3576108e361344c565b60405190808252806020026020018201604052801561091657816020015b60608152602001906001900390816109015790505b509050600034815b8581101561073e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181143688888481811061095e5761095e6133d0565b905060200281019061097091906138b3565b905036600061098260208401846134b9565b90925090508015806109a2575061099c60408401846138e7565b82141590505b156109d9576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a9b57610a93604051806080016040528086600001358152602001858585818110610a0e57610a0e6133d0565b9050602002810190610a20919061394e565b610a2990613982565b8152602001610a3b60408801886138e7565b85818110610a4b57610a4b6133d0565b905060600201803603810190610a6191906139f9565b8152602001610a766080880160608901613190565b73ffffffffffffffffffffffffffffffffffffffff169052612117565b6001016109dc565b506000610ac48435610aad8486613732565b610abd6080880160608901613190565b8a896111ff565b8051909150610ad390886137a6565b96508060200151898781518110610aec57610aec6133d0565b602002602001018190525080602001515188019750856001019550505050505061091e565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820192909252610120810191909152600082815260026020818152604092839020835161014081018552815481526001820154928101929092529182015467ffffffffffffffff808216948301949094526801000000000000000081048416606083015270010000000000000000000000000000000090049092166080830152600381015460a0830152600481015473ffffffffffffffffffffffffffffffffffffffff90811660c0840152600582015490811660e084015274010000000000000000000000000000000000000000900460ff16151561010083015260068101805461012084019190610c47906133ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610c73906133ff565b8015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b5050505050815250509050919050565b60004261058a338483611100565b6000610cf1610cec83613a15565b612117565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d08579050509050610d76602084018461394e565b610d7f90613982565b81600081518110610d9257610d926133d0565b6020908102919091010152610dbb833582610db360c0870160a08801613190565b3460016111ff565b60200151600081518110610dd157610dd16133d0565b6020026020010151915050919050565b3460005b828110156108b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181146000858584818110610e2657610e266133d0565b9050602002810190610e3891906138b3565b610e4190613afa565b60208101518051919250901580610e5e5750816040015151815114155b15610e95576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8151811015610f2657610f1e604051806080016040528085600001518152602001848481518110610ecb57610ecb6133d0565b6020026020010151815260200185604001518481518110610eee57610eee6133d0565b60200260200101518152602001856060015173ffffffffffffffffffffffffffffffffffffffff168152506122a6565b600101610e98565b50610f3c826000015182846060015188876119f9565b610f4690866137a6565b9450836001019350505050610de5565b610f6d610f6836839003830183613bd9565b6122a6565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610f84579050509050610fbf3683900383016020840161382f565b81600081518110610fd257610fd26133d0565b60209081029190910101526107d2823582610ff360e0860160c08701613190565b3460016119f9565b60004282825b818110156105845761102b86868381811061101e5761101e6133d0565b9050602002013584612055565b600101611001565b600061103d612334565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161105c5790505090506110ca602084018461394e565b6110d390613982565b816000815181106110e6576110e66133d0565b6020908102919091010152610dbb833582333460016111ff565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460209081526040808320858452918290529091205467ffffffffffffffff1615611174576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff8111156112445761124461344c565b60405190808252806020026020018201604052801561126d578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611301573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113479190810190613c35565b8051909150611382576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561139d5761139d61344c565b60405190808252806020026020018201604052801561143c57816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816113bb5790505b50905060008467ffffffffffffffff81111561145a5761145a61344c565b604051908082528060200260200182016040528015611483578160200160208202803683370190505b50905060005b8581101561190b5760008b82815181106114a5576114a56133d0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff16141580156114f057504267ffffffffffffffff16816020015167ffffffffffffffff1611155b15611527576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561153a575080604001515b15611571576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016115954290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6116378382612468565b600081815260026020526040902054909250156116565760010161162d565b818352600082815260026020818152604092839020865181559086015160018201559185015190820180546060870151608088015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0840151600382015560c084015160048201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906117d59082613d5b565b50505060608401511561182c57606084015160009081526002602052604090205461182c576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061183f5761183f6133d0565b60200260200101819052508360a00151868681518110611861576118616133d0565b6020026020010181815250508189602001518681518110611884576118846133d0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35856040516118f491815260200190565b60405180910390a484600101945050505050611489565b5061191b83838360008c8c6124c7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156119495761194961344c565b604051908082528060200260200182016040528015611972578160200160208202803683370190505b5090506000805b8551811015610584576000868281518110611996576119966133d0565b6020026020010151905060005b81518110156119ef578181815181106119be576119be6133d0565b60200260200101518585815181106119d8576119d86133d0565b6020908102919091010152600193840193016119a3565b5050600101611979565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611acf9190810190613c35565b8051909150611b0a576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff811115611b2757611b2761344c565b604051908082528060200260200182016040528015611bc657816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611b455790505b50905060008267ffffffffffffffff811115611be457611be461344c565b604051908082528060200260200182016040528015611c0d578160200160208202803683370190505b50905060005b838110156120375760008a8281518110611c2f57611c2f6133d0565b6020908102919091018101518051600090815260029092526040909120805491925090611c88576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611cc5576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c8116911614611d1b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611d71576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611dcb576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611ed7906133ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611f03906133ff565b8015611f505780601f10611f2557610100808354040283529160200191611f50565b820191906000526020600020905b815481529060010190602001808311611f3357829003601f168201915b505050505081525050858481518110611f6b57611f6b6133d0565b60200260200101819052508160200151848481518110611f8d57611f8d6133d0565b60200260200101818152505080600101548b73ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615856000015160405161202591815260200190565b60405180910390a45050600101611c13565b5061204784838360018b8b6124c7565b9a9950505050505050505050565b60008281526003602052604090205467ffffffffffffffff16156120a5576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b60208082015160408084015160608086015173ffffffffffffffffffffffffffffffffffffffff1660009081526001808752848220805491820190558751865187890151878901519589015160808a01518051908c01209851999a97999498959761221d97612202977fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de619791939290918c9101978852602088019690965273ffffffffffffffffffffffffffffffffffffffff94909416604087015267ffffffffffffffff9290921660608601521515608085015260a084015260c083015260e08201526101000190565b604051602081830303815290604052805190602001206128a1565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16612252828560000151866020015187604001516128b4565b73ffffffffffffffffffffffffffffffffffffffff161461229f576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60208181015160408084015160608086015173ffffffffffffffffffffffffffffffffffffffff1660009081526001808752848220805491820190558751865186517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996509981019990995295880152918601939093526080850181905292939092919061221d9060a001612202565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561239a57507f000000000000000000000000000000000000000000000000000000000000000046145b156123c457507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b015194516000996124a999989796918c9101613e75565b60405160208183030381529060405280519060200120905092915050565b8451600090600181900361251f5761251788886000815181106124ec576124ec6133d0565b602002602001015188600081518110612507576125076133d0565b60200260200101518888886128dc565b915050610749565b602088015173ffffffffffffffffffffffffffffffffffffffff81166125b15760005b828110156125a55787818151811061255c5761255c6133d0565b602002602001015160001461259d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612542565b50600092505050610749565b6000805b838110156126db5760008982815181106125d1576125d16133d0565b602002602001015190508060001415801561265857508373ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126569190613f53565b155b1561268f576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b878111156126c9576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b968790039691909101906001016125b5565b5086156127b6576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906388e5b2d9908390612738908d908d90600401613f70565b60206040518083038185885af1158015612756573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061277b9190613f53565b6127b1576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612885565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906391db0b7e90839061280c908d908d90600401613f70565b60206040518083038185885af115801561282a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061284f9190613f53565b612885576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84156128945761289486612bf2565b9998505050505050505050565b600061058a6128ae612334565b83612c05565b60008060006128c587878787612c47565b915091506128d281612d36565b5095945050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff8116612941578515612937576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000915050610749565b85158015906129bc57508073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ba9190613f53565b155b156129f3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115612a2d576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393508415612b0a576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890612a8c908b90600401613309565b60206040518083038185885af1158015612aaa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612acf9190613f53565b612b05576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bd7565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890612b5e908b90600401613309565b60206040518083038185885af1158015612b7c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba19190613f53565b612bd7576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215612be657612be684612bf2565b50939695505050505050565b8015612c0257612c023382612eee565b50565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101839052604281018290526000906062016124a9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c7e5750600090506003612d2d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cd2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612d2657600060019250925050612d2d565b9150600090505b94509492505050565b6000816004811115612d4a57612d4a614029565b03612d525750565b6001816004811115612d6657612d66614029565b03612dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115612de657612de6614029565b03612e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401612dc9565b6003816004811115612e6157612e61614029565b03612c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401612dc9565b80471015612f58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612dc9565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612fb2576040519150601f19603f3d011682016040523d82523d6000602084013e612fb7565b606091505b50509050806107d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612dc9565b60008083601f84011261305a57600080fd5b50813567ffffffffffffffff81111561307257600080fd5b6020830191508360208260051b850101111561308d57600080fd5b9250929050565b600080602083850312156130a757600080fd5b823567ffffffffffffffff8111156130be57600080fd5b6130ca85828601613048565b90969095509350505050565b60005b838110156130f15781810151838201526020016130d9565b50506000910152565b600081518084526131128160208601602086016130d6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061315760208301846130fa565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114612c0257600080fd5b803561318b8161315e565b919050565b6000602082840312156131a257600080fd5b81356131578161315e565b6020808252825182820181905260009190848201906040850190845b818110156131e5578351835292840192918401916001016131c9565b50909695505050505050565b60006060828403121561320357600080fd5b50919050565b60006020828403121561321b57600080fd5b5035919050565b600061014082518452602083015160208501526040830151613250604086018267ffffffffffffffff169052565b50606083015161326c606086018267ffffffffffffffff169052565b506080830151613288608086018267ffffffffffffffff169052565b5060a083015160a085015260c08301516132ba60c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e08301516132e260e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052610749838701826130fa565b6020815260006131576020830184613222565b6000806040838503121561332f57600080fd5b823561333a8161315e565b946020939093013593505050565b60006020828403121561335a57600080fd5b813567ffffffffffffffff81111561337157600080fd5b820160c0818503121561315757600080fd5b600060e0828403121561320357600080fd5b6000602082840312156133a757600080fd5b813567ffffffffffffffff8111156133be57600080fd5b82016040818503121561315757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061341357607f821691505b602082108103613203577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126134af57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134ee57600080fd5b83018035915067ffffffffffffffff82111561350957600080fd5b6020019150600581901b360382131561308d57600080fd5b60405160c0810167ffffffffffffffff811182821017156135445761354461344c565b60405290565b6040516080810167ffffffffffffffff811182821017156135445761354461344c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156135b4576135b461344c565b604052919050565b600067ffffffffffffffff8211156135d6576135d661344c565b5060051b60200190565b8015158114612c0257600080fd5b803561318b816135e0565b600067ffffffffffffffff8211156136135761361361344c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261365057600080fd5b813561366361365e826135f9565b61356d565b81815284602083860101111561367857600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156136a757600080fd5b6136af613521565b905081356136bc8161315e565b8152602082013567ffffffffffffffff80821682146136da57600080fd5b8160208401526136ec604085016135ee565b604084015260608401356060840152608084013591508082111561370f57600080fd5b5061371c8482850161363f565b60808301525060a082013560a082015292915050565b600061374061365e846135bc565b80848252602080830192508560051b85013681111561375e57600080fd5b855b8181101561379a57803567ffffffffffffffff8111156137805760008081fd5b61378c36828a01613695565b865250938201938201613760565b50919695505050505050565b8181038181111561058a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000604082840312156137f257600080fd5b6040516040810181811067ffffffffffffffff821117156138155761381561344c565b604052823581526020928301359281019290925250919050565b60006040828403121561384157600080fd5b61315783836137e0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261388057600080fd5b83018035915067ffffffffffffffff82111561389b57600080fd5b6020019150600681901b360382131561308d57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126134af57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261391c57600080fd5b83018035915067ffffffffffffffff82111561393757600080fd5b602001915060608102360382131561308d57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff418336030181126134af57600080fd5b600061058a3683613695565b6000606082840312156139a057600080fd5b6040516060810181811067ffffffffffffffff821117156139c3576139c361344c565b604052905080823560ff811681146139da57600080fd5b8082525060208301356020820152604083013560408201525092915050565b600060608284031215613a0b57600080fd5b613157838361398e565b600060c08236031215613a2757600080fd5b613a2f61354a565b82358152602083013567ffffffffffffffff811115613a4d57600080fd5b613a5936828601613695565b602083015250613a6c366040850161398e565b604082015260a0830135613a7f8161315e565b606082015292915050565b600082601f830112613a9b57600080fd5b81356020613aab61365e836135bc565b82815260609283028501820192828201919087851115613aca57600080fd5b8387015b85811015613aed57613ae0898261398e565b8452928401928101613ace565b5090979650505050505050565b600060808236031215613b0c57600080fd5b613b1461354a565b8235815260208084013567ffffffffffffffff80821115613b3457600080fd5b9085019036601f830112613b4757600080fd5b8135613b5561365e826135bc565b81815260069190911b83018401908481019036831115613b7457600080fd5b938501935b82851015613b9d57613b8b36866137e0565b82528582019150604085019450613b79565b80868801525050506040860135925080831115613bb957600080fd5b5050613bc736828601613a8a565b604083015250613a7f60608401613180565b600060e08284031215613beb57600080fd5b613bf361354a565b82358152613c0484602085016137e0565b6020820152613c16846060850161398e565b604082015260c0830135613c298161315e565b60608201529392505050565b60006020808385031215613c4857600080fd5b825167ffffffffffffffff80821115613c6057600080fd5b9084019060808287031215613c7457600080fd5b613c7c61354a565b8251815283830151613c8d8161315e565b818501526040830151613c9f816135e0565b6040820152606083015182811115613cb657600080fd5b80840193505086601f840112613ccb57600080fd5b82519150613cdb61365e836135f9565b8281528785848601011115613cef57600080fd5b613cfe838683018787016130d6565b60608201529695505050505050565b601f8211156107d257600081815260208120601f850160051c81016020861015613d345750805b601f850160051c820191505b81811015613d5357828155600101613d40565b505050505050565b815167ffffffffffffffff811115613d7557613d7561344c565b613d8981613d8384546133ff565b84613d0d565b602080601f831160018114613ddc5760008415613da65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613d53565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e2957888601518255948401946001909101908401613e0a565b5085821015613e6557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351613f0e8160798501602088016130d6565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b600060208284031215613f6557600080fd5b8151613157816135e0565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b83811015613fe5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552613fd3868351613222565b95509382019390820190600101613f99565b50508584038187015286518085528782019482019350915060005b8281101561401c57845184529381019392810192600101614000565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561001057600080fd5b506107df806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806360d7a27814610046578063a2ea7c6e1461006c578063ffa1ad741461008c575b600080fd5b6100596100543660046103e6565b6100d5565b6040519081526020015b60405180910390f35b61007f61007a366004610498565b61027e565b604051610063919061051f565b6100c86040518060400160405280600481526020017f302e32370000000000000000000000000000000000000000000000000000000081525081565b6040516100639190610578565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101579050826103a6565b600081815260208190526040902054909150156101a0576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff90921691909117929092179091556060830151839190600282019061023c9082610663565b50506040513381528291507f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c9060200160405180910390a29695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff1615159282019290925260028201805491929160608401919061031d906105c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610349906105c1565b80156103965780601f1061036b57610100808354040283529160200191610396565b820191906000526020600020905b81548152906001019060200180831161037957829003601f168201915b5050505050815250509050919050565b60008160600151826020015183604001516040516020016103c99392919061077d565b604051602081830303815290604052805190602001209050919050565b600080600080606085870312156103fc57600080fd5b843567ffffffffffffffff8082111561041457600080fd5b818701915087601f83011261042857600080fd5b81358181111561043757600080fd5b88602082850101111561044957600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461047857600080fd5b91506040850135801515811461048d57600080fd5b939692955090935050565b6000602082840312156104aa57600080fd5b5035919050565b60005b838110156104cc5781810151838201526020016104b4565b50506000910152565b600081518084526104ed8160208601602086016104b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201526040820151151560608201526000606083015160808084015261057060a08401826104d5565b949350505050565b60208152600061058b60208301846104d5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806105d557607f821691505b60208210810361060e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561065e57600081815260208120601f850160051c8101602086101561063b5750805b601f850160051c820191505b8181101561065a57828155600101610647565b5050505b505050565b815167ffffffffffffffff81111561067d5761067d610592565b6106918161068b84546105c1565b84610614565b602080601f8311600181146106e457600084156106ae5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561065a565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561073157888601518255948401946001909101908401610712565b508582101561076d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000845161078f8184602089016104b1565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/base-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/celo/.chainId",
    "content": "42220"
  },
  {
    "path": "deployments/celo/.migrations.json",
    "content": "{\n  \"000001-registry\": 1710900693,\n  \"000002-eas\": 1710900707,\n  \"000003-register-initial-schemas\": 1710901215,\n  \"000004-name-initial-schemas\": 1710901734,\n  \"000005-eip712-proxy\": 1710901744,\n  \"000006-indexer\": 1710901754\n}"
  },
  {
    "path": "deployments/celo/EAS.json",
    "content": "{\n  \"address\": \"0x72E1d8ccf5299fb36fEfD8CC4394B8ef7e98Af92\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc5f305b48ee9f96b488f5e174eb7cd295fdf938216f76933f7a279db0c960aae\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xef87786b3e80191526838bc09EA423dEF5BF1F3F\",\n    \"contractAddress\": \"0x72E1d8ccf5299fb36fEfD8CC4394B8ef7e98Af92\",\n    \"transactionIndex\": 23,\n    \"gasUsed\": \"4147826\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x9d268cb7cc687dd1082c13979bf8afd65227ce718880fac2328369849e0d9efc\",\n    \"transactionHash\": \"0xc5f305b48ee9f96b488f5e174eb7cd295fdf938216f76933f7a279db0c960aae\",\n    \"logs\": [],\n    \"blockNumber\": 24646040,\n    \"cumulativeGasUsed\": \"9180727\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x5ece93bE4BDCF293Ed61FA78698B594F2135AF34\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0ccad8feb72c73528fddde76e00bd7717233711079e744165e34312169f85684\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8a6310b2a5d70bfd849fbf470507a545df5fb4934b59cd95337014ba017e485a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 1947,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 1949,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6347,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6351,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3342,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3236_storage)\"\n      },\n      {\n        \"astId\": 3346,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3352,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3236_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3236_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3236_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3217,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3219,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3221,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3223,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3225,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3227,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3229,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3231,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3233,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3235,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/celo/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x6792B6AE17c6416016b943585e957a29bc452806\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x6bd4e54e398c28ccd3e589a9f29ea1393f32a6aad415d95d4dd685a4fb175258\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xef87786b3e80191526838bc09EA423dEF5BF1F3F\",\n    \"contractAddress\": \"0x6792B6AE17c6416016b943585e957a29bc452806\",\n    \"transactionIndex\": 7,\n    \"gasUsed\": \"2309309\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x34abe5773ec1b245d00c498b7ac227c0c45096b36ac9368336498cba80243922\",\n    \"transactionHash\": \"0x6bd4e54e398c28ccd3e589a9f29ea1393f32a6aad415d95d4dd685a4fb175258\",\n    \"logs\": [],\n    \"blockNumber\": 24646248,\n    \"cumulativeGasUsed\": \"3074444\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x72E1d8ccf5299fb36fEfD8CC4394B8ef7e98Af92\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 1947,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 1949,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6751,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6755,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 6759,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/celo/Indexer.json",
    "content": "{\n  \"address\": \"0x76591b332d0F099E89FA335fC827D44C47705D2f\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x1ca8ccd6befabd2ed3350c9ab7cb00256ff6505bd1bda4689704edbd14b10828\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xef87786b3e80191526838bc09EA423dEF5BF1F3F\",\n    \"contractAddress\": \"0x76591b332d0F099E89FA335fC827D44C47705D2f\",\n    \"transactionIndex\": 8,\n    \"gasUsed\": \"980765\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x953725583e09b1ead84d07ffa00771a6ee66240d3b78600ecd66fa96d2264145\",\n    \"transactionHash\": \"0x1ca8ccd6befabd2ed3350c9ab7cb00256ff6505bd1bda4689704edbd14b10828\",\n    \"logs\": [],\n    \"blockNumber\": 24646250,\n    \"cumulativeGasUsed\": \"2162621\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x72E1d8ccf5299fb36fEfD8CC4394B8ef7e98Af92\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5599,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 5606,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 5615,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 5620,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 5624,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/celo/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x5ece93bE4BDCF293Ed61FA78698B594F2135AF34\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xdcd434318f454f3b5eda91e17a500346d6960b72c5fbbfb4daf36d47b2803084\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xef87786b3e80191526838bc09EA423dEF5BF1F3F\",\n    \"contractAddress\": \"0x5ece93bE4BDCF293Ed61FA78698B594F2135AF34\",\n    \"transactionIndex\": 14,\n    \"gasUsed\": \"631544\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x711cb86c5fd508ae530ddc81c7c85e0589516d751d817e8422d940f3a71e43c7\",\n    \"transactionHash\": \"0xdcd434318f454f3b5eda91e17a500346d6960b72c5fbbfb4daf36d47b2803084\",\n    \"logs\": [],\n    \"blockNumber\": 24646038,\n    \"cumulativeGasUsed\": \"3090826\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"5760880ca66b7de425cfa0a331639e8e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba2bb65a85b07bd4b0dce71c2603601d264f9fae7f10aa0a90849196df5f2b2a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6137,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)5519_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)7739\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)5519_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)5519_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)5519_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 5511,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5514,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)7739\"\n          },\n          {\n            \"astId\": 5516,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 5518,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/celo/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/celo/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/celo/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/celo/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/celo/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/celo/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/celo/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/celo/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/hardhat/.chainId",
    "content": "31337\n"
  },
  {
    "path": "deployments/ink/.chainId",
    "content": "57073\n"
  },
  {
    "path": "deployments/ink/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1739761699,\n  \"000004-name-initial-schemas\": 1739762014,\n  \"000005-eip712-proxy\": 1739762227,\n  \"000006-indexer\": 1739762232\n}"
  },
  {
    "path": "deployments/ink/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/ink/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x6511967899445c5944f555Fe2B2D5EC4D74d2579\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5387021930a4233089ace675c8295b01ffd2bf1d2aebdeba5c3d03b207e218e6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x09F8e51f9384562d31909249ef6Da6667AF67c14\",\n    \"contractAddress\": \"0x6511967899445c5944f555Fe2B2D5EC4D74d2579\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2297740\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x49f8bb938fe308bc55ed39be65f9ba76cab6b6350173f1f242727c53c1962a43\",\n    \"transactionHash\": \"0x5387021930a4233089ace675c8295b01ffd2bf1d2aebdeba5c3d03b207e218e6\",\n    \"logs\": [],\n    \"blockNumber\": 6263814,\n    \"cumulativeGasUsed\": \"2341630\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\\\\\"1.4.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != request.revoker) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3573,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 3581,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/ink/Indexer.json",
    "content": "{\n  \"address\": \"0xd87dCB0E5E0044Ba5Aa57D383cd3f8D0509a42b9\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x12f8f2ccb87ae260c9b86b05031f0973fe93dedc591954c3c4f86a69c9240bc7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x09F8e51f9384562d31909249ef6Da6667AF67c14\",\n    \"contractAddress\": \"0xd87dCB0E5E0044Ba5Aa57D383cd3f8D0509a42b9\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"989532\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x03a7c454cbad224bdd7a9b5d705c388e7ae7f59e9abd8c50ccecff6470e959ee\",\n    \"transactionHash\": \"0x12f8f2ccb87ae260c9b86b05031f0973fe93dedc591954c3c4f86a69c9240bc7\",\n    \"logs\": [],\n    \"blockNumber\": 6263819,\n    \"cumulativeGasUsed\": \"1033422\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2421,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2428,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 2442,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 2446,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/ink/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/ink/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/ink/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/ink/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  Indexer,\n  IndexerInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/ink/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/.chainId",
    "content": "763373\n"
  },
  {
    "path": "deployments/ink-sepolia/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1732802675,\n  \"000004-name-initial-schemas\": 1732802681,\n  \"000005-eip712-proxy\": 1732802997,\n  \"000006-indexer\": 1732803300,\n  \"000100-test-seed\": 1732813635\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xbe240d67a9f696f42f2daa13a57052fb5ed8a085e64a6e126b1853a9fd731a12\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xbA20d34dc4745A3190fEDdEBdDc70270895B457F\",\n    \"contractAddress\": \"0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2297740\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x67e94624769fceff8666258dd26414a119c3fb25ab3cad6da63a6b6864eef380\",\n    \"transactionHash\": \"0xbe240d67a9f696f42f2daa13a57052fb5ed8a085e64a6e126b1853a9fd731a12\",\n    \"logs\": [],\n    \"blockNumber\": 3799376,\n    \"cumulativeGasUsed\": \"2341606\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\\\\\"1.4.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != request.revoker) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3573,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 3581,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/ink-sepolia/Indexer.json",
    "content": "{\n  \"address\": \"0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4e0a53b3b8d7ffa058060770c21a2daadb60d8ed1e2a1f6a491e9645e3949ea1\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xbA20d34dc4745A3190fEDdEBdDc70270895B457F\",\n    \"contractAddress\": \"0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"989532\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x3a77da50022600316571122283ee9ffafc990c58b58ecaf92c3b6215c8453959\",\n    \"transactionHash\": \"0x4e0a53b3b8d7ffa058060770c21a2daadb60d8ed1e2a1f6a491e9645e3949ea1\",\n    \"logs\": [],\n    \"blockNumber\": 3799383,\n    \"cumulativeGasUsed\": \"1033398\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2421,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2428,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 2442,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 2446,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/ink-sepolia/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/solcInputs/ab2e55c92b39ec3be86af0608f634927.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n// A representation of an empty/uninitialized UID.\\nbytes32 constant EMPTY_UID = 0;\\n\\n// A zero expiration represents an non-expiring attestation.\\nuint64 constant NO_EXPIRATION_TIME = 0;\\n\\nerror AccessDenied();\\nerror DeadlineExpired();\\nerror InvalidEAS();\\nerror InvalidLength();\\nerror InvalidSignature();\\nerror NotFound();\\n\\n/// @notice A struct representing ECDSA signature data.\\nstruct Signature {\\n    uint8 v; // The recovery ID.\\n    bytes32 r; // The x-coordinate of the nonce R.\\n    bytes32 s; // The signature data.\\n}\\n\\n/// @notice A struct representing a single attestation.\\nstruct Attestation {\\n    bytes32 uid; // A unique identifier of the attestation.\\n    bytes32 schema; // The unique identifier of the schema.\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\n    bytes32 refUID; // The UID of the related attestation.\\n    address recipient; // The recipient of the attestation.\\n    address attester; // The attester/sender of the attestation.\\n    bool revocable; // Whether the attestation is revocable.\\n    bytes data; // Custom attestation data.\\n}\\n\\n/// @notice A helper function to work with unchecked iterators in loops.\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\n    unchecked {\\n        j = i + 1;\\n    }\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { EIP1271Verifier } from \\\"./eip1271/EIP1271Verifier.sol\\\";\\n\\nimport { ISchemaResolver } from \\\"./resolver/ISchemaResolver.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n    AccessDenied,\\n    EMPTY_UID,\\n    InvalidLength,\\n    NotFound,\\n    NO_EXPIRATION_TIME,\\n    uncheckedInc\\n} from \\\"./Common.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n    Attestation,\\n    AttestationRequest,\\n    AttestationRequestData,\\n    DelegatedAttestationRequest,\\n    DelegatedRevocationRequest,\\n    IEAS,\\n    MultiAttestationRequest,\\n    MultiDelegatedAttestationRequest,\\n    MultiDelegatedRevocationRequest,\\n    MultiRevocationRequest,\\n    RevocationRequest,\\n    RevocationRequestData\\n} from \\\"./IEAS.sol\\\";\\n\\nimport { Semver } from \\\"./Semver.sol\\\";\\nimport { ISchemaRegistry, SchemaRecord } from \\\"./ISchemaRegistry.sol\\\";\\n\\n/// @title EAS\\n/// @notice The Ethereum Attestation Service protocol.\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\n    using Address for address payable;\\n\\n    error AlreadyRevoked();\\n    error AlreadyRevokedOffchain();\\n    error AlreadyTimestamped();\\n    error InsufficientValue();\\n    error InvalidAttestation();\\n    error InvalidAttestations();\\n    error InvalidExpirationTime();\\n    error InvalidOffset();\\n    error InvalidRegistry();\\n    error InvalidRevocation();\\n    error InvalidRevocations();\\n    error InvalidSchema();\\n    error InvalidVerifier();\\n    error Irrevocable();\\n    error NotPayable();\\n    error WrongSchema();\\n\\n    /// @notice A struct representing an internal attestation result.\\n    struct AttestationsResult {\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\n        bytes32[] uids; // UIDs of the new attestations.\\n    }\\n\\n    // The global schema registry.\\n    ISchemaRegistry private immutable _schemaRegistry;\\n\\n    // The global mapping between attestations and their UIDs.\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\n\\n    // The global mapping between data and their timestamps.\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\n\\n    // The global mapping between data and their revocation timestamps.\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\n\\n    /// @dev Creates a new EAS instance.\\n    /// @param registry The address of the global schema registry.\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\"EAS\\\", \\\"1.3.0\\\") {\\n        if (address(registry) == address(0)) {\\n            revert InvalidRegistry();\\n        }\\n\\n        _schemaRegistry = registry;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\n        return _schemaRegistry;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\n        data[0] = request.data;\\n\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function attestByDelegation(\\n        DelegatedAttestationRequest calldata delegatedRequest\\n    ) external payable returns (bytes32) {\\n        _verifyAttest(delegatedRequest);\\n\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\n        data[0] = delegatedRequest.data;\\n\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\n        // all the returned UIDs into a single list.\\n        uint256 length = multiRequests.length;\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\n        uint256 totalUIDCount = 0;\\n\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\n        // possible to send too much ETH anyway.\\n        uint256 availableValue = msg.value;\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\n            // last and final batch).\\n            bool last;\\n            unchecked {\\n                last = i == length - 1;\\n            }\\n\\n            // Process the current batch of attestations.\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\n\\n            // Ensure that data isn't empty.\\n            if (multiRequest.data.length == 0) {\\n                revert InvalidLength();\\n            }\\n\\n            AttestationsResult memory res = _attest(\\n                multiRequest.schema,\\n                multiRequest.data,\\n                msg.sender,\\n                availableValue,\\n                last\\n            );\\n\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\n            availableValue -= res.usedValue;\\n\\n            // Collect UIDs (and merge them later).\\n            totalUIDs[i] = res.uids;\\n            unchecked {\\n                totalUIDCount += res.uids.length;\\n            }\\n        }\\n\\n        // Merge all the collected UIDs and return them as a flatten array.\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function multiAttestByDelegation(\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\n    ) external payable returns (bytes32[] memory) {\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\n        // all the returned UIDs into a single list.\\n        uint256 length = multiDelegatedRequests.length;\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\n        uint256 totalUIDCount = 0;\\n\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\n        // possible to send too much ETH anyway.\\n        uint256 availableValue = msg.value;\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\n            // last and final batch).\\n            bool last;\\n            unchecked {\\n                last = i == length - 1;\\n            }\\n\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\n\\n            // Ensure that no inputs are missing.\\n            uint256 dataLength = data.length;\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\n                revert InvalidLength();\\n            }\\n\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n                _verifyAttest(\\n                    DelegatedAttestationRequest({\\n                        schema: multiDelegatedRequest.schema,\\n                        data: data[j],\\n                        signature: multiDelegatedRequest.signatures[j],\\n                        attester: multiDelegatedRequest.attester,\\n                        deadline: multiDelegatedRequest.deadline\\n                    })\\n                );\\n            }\\n\\n            // Process the current batch of attestations.\\n            AttestationsResult memory res = _attest(\\n                multiDelegatedRequest.schema,\\n                data,\\n                multiDelegatedRequest.attester,\\n                availableValue,\\n                last\\n            );\\n\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\n            availableValue -= res.usedValue;\\n\\n            // Collect UIDs (and merge them later).\\n            totalUIDs[i] = res.uids;\\n            unchecked {\\n                totalUIDCount += res.uids.length;\\n            }\\n        }\\n\\n        // Merge all the collected UIDs and return them as a flatten array.\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function revoke(RevocationRequest calldata request) external payable {\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\n        data[0] = request.data;\\n\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\n        _verifyRevoke(delegatedRequest);\\n\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\n        data[0] = delegatedRequest.data;\\n\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\n        // possible to send too much ETH anyway.\\n        uint256 availableValue = msg.value;\\n\\n        uint256 length = multiRequests.length;\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\n            // last and final batch).\\n            bool last;\\n            unchecked {\\n                last = i == length - 1;\\n            }\\n\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\n\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\n        }\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function multiRevokeByDelegation(\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\n    ) external payable {\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\n        // possible to send too much ETH anyway.\\n        uint256 availableValue = msg.value;\\n\\n        uint256 length = multiDelegatedRequests.length;\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\n            // last and final batch).\\n            bool last;\\n            unchecked {\\n                last = i == length - 1;\\n            }\\n\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\n\\n            // Ensure that no inputs are missing.\\n            uint256 dataLength = data.length;\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\n                revert InvalidLength();\\n            }\\n\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n                _verifyRevoke(\\n                    DelegatedRevocationRequest({\\n                        schema: multiDelegatedRequest.schema,\\n                        data: data[j],\\n                        signature: multiDelegatedRequest.signatures[j],\\n                        revoker: multiDelegatedRequest.revoker,\\n                        deadline: multiDelegatedRequest.deadline\\n                    })\\n                );\\n            }\\n\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\n            availableValue -= _revoke(\\n                multiDelegatedRequest.schema,\\n                data,\\n                multiDelegatedRequest.revoker,\\n                availableValue,\\n                last\\n            );\\n        }\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function timestamp(bytes32 data) external returns (uint64) {\\n        uint64 time = _time();\\n\\n        _timestamp(data, time);\\n\\n        return time;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\n        uint64 time = _time();\\n\\n        _revokeOffchain(msg.sender, data, time);\\n\\n        return time;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\n        uint64 time = _time();\\n\\n        uint256 length = data.length;\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            _revokeOffchain(msg.sender, data[i], time);\\n        }\\n\\n        return time;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\n        uint64 time = _time();\\n\\n        uint256 length = data.length;\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            _timestamp(data[i], time);\\n        }\\n\\n        return time;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\n        return _db[uid];\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\n        return _db[uid].uid != EMPTY_UID;\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\n        return _timestamps[data];\\n    }\\n\\n    /// @inheritdoc IEAS\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\n        return _revocationsOffchain[revoker][data];\\n    }\\n\\n    /// @dev Attests to a specific schema.\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\n    /// @param data The arguments of the attestation requests.\\n    /// @param attester The attesting account.\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\n    /// @param last Whether this is the last attestations/revocations set.\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\n    function _attest(\\n        bytes32 schemaUID,\\n        AttestationRequestData[] memory data,\\n        address attester,\\n        uint256 availableValue,\\n        bool last\\n    ) private returns (AttestationsResult memory) {\\n        uint256 length = data.length;\\n\\n        AttestationsResult memory res;\\n        res.uids = new bytes32[](length);\\n\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\n        if (schemaRecord.uid == EMPTY_UID) {\\n            revert InvalidSchema();\\n        }\\n\\n        Attestation[] memory attestations = new Attestation[](length);\\n        uint256[] memory values = new uint256[](length);\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            AttestationRequestData memory request = data[i];\\n\\n            // Ensure that either no expiration time was set or that it was set in the future.\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\n                revert InvalidExpirationTime();\\n            }\\n\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\n            if (!schemaRecord.revocable && request.revocable) {\\n                revert Irrevocable();\\n            }\\n\\n            Attestation memory attestation = Attestation({\\n                uid: EMPTY_UID,\\n                schema: schemaUID,\\n                refUID: request.refUID,\\n                time: _time(),\\n                expirationTime: request.expirationTime,\\n                revocationTime: 0,\\n                recipient: request.recipient,\\n                attester: attester,\\n                revocable: request.revocable,\\n                data: request.data\\n            });\\n\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\n            bytes32 uid;\\n            uint32 bump = 0;\\n            while (true) {\\n                uid = _getUID(attestation, bump);\\n                if (_db[uid].uid == EMPTY_UID) {\\n                    break;\\n                }\\n\\n                unchecked {\\n                    ++bump;\\n                }\\n            }\\n            attestation.uid = uid;\\n\\n            _db[uid] = attestation;\\n\\n            if (request.refUID != EMPTY_UID) {\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\n                if (!isAttestationValid(request.refUID)) {\\n                    revert NotFound();\\n                }\\n            }\\n\\n            attestations[i] = attestation;\\n            values[i] = request.value;\\n\\n            res.uids[i] = uid;\\n\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\n        }\\n\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\n\\n        return res;\\n    }\\n\\n    /// @dev Revokes an existing attestation to a specific schema.\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\n    /// @param data The arguments of the revocation requests.\\n    /// @param revoker The revoking account.\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\n    /// @param last Whether this is the last attestations/revocations set.\\n    /// @return Returns the total sent ETH amount.\\n    function _revoke(\\n        bytes32 schemaUID,\\n        RevocationRequestData[] memory data,\\n        address revoker,\\n        uint256 availableValue,\\n        bool last\\n    ) private returns (uint256) {\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\n        if (schemaRecord.uid == EMPTY_UID) {\\n            revert InvalidSchema();\\n        }\\n\\n        uint256 length = data.length;\\n        Attestation[] memory attestations = new Attestation[](length);\\n        uint256[] memory values = new uint256[](length);\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            RevocationRequestData memory request = data[i];\\n\\n            Attestation storage attestation = _db[request.uid];\\n\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\n            if (attestation.uid == EMPTY_UID) {\\n                revert NotFound();\\n            }\\n\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\n            if (attestation.schema != schemaUID) {\\n                revert InvalidSchema();\\n            }\\n\\n            // Allow only original attesters to revoke their attestations.\\n            if (attestation.attester != revoker) {\\n                revert AccessDenied();\\n            }\\n\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\n            // make revocable attestations to an irrevocable schema.\\n            if (!attestation.revocable) {\\n                revert Irrevocable();\\n            }\\n\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\n            if (attestation.revocationTime != 0) {\\n                revert AlreadyRevoked();\\n            }\\n            attestation.revocationTime = _time();\\n\\n            attestations[i] = attestation;\\n            values[i] = request.value;\\n\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\n        }\\n\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\n    }\\n\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\n    /// @param schemaRecord The schema of the attestation.\\n    /// @param attestation The data of the attestation to make/revoke.\\n    /// @param value An explicit ETH amount to send to the resolver.\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\n    /// @param last Whether this is the last attestations/revocations set.\\n    /// @return Returns the total sent ETH amount.\\n    function _resolveAttestation(\\n        SchemaRecord memory schemaRecord,\\n        Attestation memory attestation,\\n        uint256 value,\\n        bool isRevocation,\\n        uint256 availableValue,\\n        bool last\\n    ) private returns (uint256) {\\n        ISchemaResolver resolver = schemaRecord.resolver;\\n        if (address(resolver) == address(0)) {\\n            // Ensure that we don't accept payments if there is no resolver.\\n            if (value != 0) {\\n                revert NotPayable();\\n            }\\n\\n            if (last) {\\n                _refund(availableValue);\\n            }\\n\\n            return 0;\\n        }\\n\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\n        if (value != 0) {\\n            if (!resolver.isPayable()) {\\n                revert NotPayable();\\n            }\\n\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\n            if (value > availableValue) {\\n                revert InsufficientValue();\\n            }\\n\\n            // Ensure to deduct the sent value explicitly.\\n            unchecked {\\n                availableValue -= value;\\n            }\\n        }\\n\\n        if (isRevocation) {\\n            if (!resolver.revoke{ value: value }(attestation)) {\\n                revert InvalidRevocation();\\n            }\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\n            revert InvalidAttestation();\\n        }\\n\\n        if (last) {\\n            _refund(availableValue);\\n        }\\n\\n        return value;\\n    }\\n\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\n    /// @param schemaRecord The schema of the attestation.\\n    /// @param attestations The data of the attestations to make/revoke.\\n    /// @param values Explicit ETH amounts to send to the resolver.\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\n    /// @param last Whether this is the last attestations/revocations set.\\n    /// @return Returns the total sent ETH amount.\\n    function _resolveAttestations(\\n        SchemaRecord memory schemaRecord,\\n        Attestation[] memory attestations,\\n        uint256[] memory values,\\n        bool isRevocation,\\n        uint256 availableValue,\\n        bool last\\n    ) private returns (uint256) {\\n        uint256 length = attestations.length;\\n        if (length == 1) {\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\n        }\\n\\n        ISchemaResolver resolver = schemaRecord.resolver;\\n        if (address(resolver) == address(0)) {\\n            // Ensure that we don't accept payments if there is no resolver.\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n                if (values[i] != 0) {\\n                    revert NotPayable();\\n                }\\n            }\\n\\n            if (last) {\\n                _refund(availableValue);\\n            }\\n\\n            return 0;\\n        }\\n\\n        uint256 totalUsedValue = 0;\\n        bool isResolverPayable = resolver.isPayable();\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            uint256 value = values[i];\\n\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\n            if (value == 0) {\\n                continue;\\n            }\\n\\n            if (!isResolverPayable) {\\n                revert NotPayable();\\n            }\\n\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\n            if (value > availableValue) {\\n                revert InsufficientValue();\\n            }\\n\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\n            unchecked {\\n                availableValue -= value;\\n                totalUsedValue += value;\\n            }\\n        }\\n\\n        if (isRevocation) {\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\n                revert InvalidRevocations();\\n            }\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\n            revert InvalidAttestations();\\n        }\\n\\n        if (last) {\\n            _refund(availableValue);\\n        }\\n\\n        return totalUsedValue;\\n    }\\n\\n    /// @dev Calculates a UID for a given attestation.\\n    /// @param attestation The input attestation.\\n    /// @param bump A bump value to use in case of a UID conflict.\\n    /// @return Attestation UID.\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\n        return\\n            keccak256(\\n                abi.encodePacked(\\n                    attestation.schema,\\n                    attestation.recipient,\\n                    attestation.attester,\\n                    attestation.time,\\n                    attestation.expirationTime,\\n                    attestation.revocable,\\n                    attestation.refUID,\\n                    attestation.data,\\n                    bump\\n                )\\n            );\\n    }\\n\\n    /// @dev Refunds remaining ETH amount to the attester.\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\n    function _refund(uint256 remainingValue) private {\\n        if (remainingValue > 0) {\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\n            // apply for.\\n            payable(msg.sender).sendValue(remainingValue);\\n        }\\n    }\\n\\n    /// @dev Timestamps the specified bytes32 data.\\n    /// @param data The data to timestamp.\\n    /// @param time The timestamp.\\n    function _timestamp(bytes32 data, uint64 time) private {\\n        if (_timestamps[data] != 0) {\\n            revert AlreadyTimestamped();\\n        }\\n\\n        _timestamps[data] = time;\\n\\n        emit Timestamped(data, time);\\n    }\\n\\n    /// @dev Revokes the specified bytes32 data.\\n    /// @param revoker The revoking account.\\n    /// @param data The data to revoke.\\n    /// @param time The timestamp the data was revoked with.\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\n\\n        if (revocations[data] != 0) {\\n            revert AlreadyRevokedOffchain();\\n        }\\n\\n        revocations[data] = time;\\n\\n        emit RevokedOffchain(revoker, data, time);\\n    }\\n\\n    /// @dev Merges lists of UIDs.\\n    /// @param uidLists The provided lists of UIDs.\\n    /// @param uidCount Total UID count.\\n    /// @return A merged and flatten list of all the UIDs.\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\n        bytes32[] memory uids = new bytes32[](uidCount);\\n\\n        uint256 currentIndex = 0;\\n        uint256 uidListLength = uidLists.length;\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\n            bytes32[] memory currentUIDs = uidLists[i];\\n            uint256 currentUIDsLength = currentUIDs.length;\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\n                uids[currentIndex] = currentUIDs[j];\\n\\n                unchecked {\\n                    ++currentIndex;\\n                }\\n            }\\n        }\\n\\n        return uids;\\n    }\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/eip1271/EIP1271Verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport { EIP712 } from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\"./../Common.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n    AttestationRequestData,\\n    DelegatedAttestationRequest,\\n    DelegatedRevocationRequest,\\n    RevocationRequestData\\n} from \\\"../IEAS.sol\\\";\\n\\n/// @title EIP1271Verifier\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\nabstract contract EIP1271Verifier is EIP712 {\\n    using Address for address;\\n\\n    error InvalidNonce();\\n\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\n    // keccak256(\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\").\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\n\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\n    // keccak256(\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\").\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\n\\n    // The user readable name of the signing domain.\\n    string private _name;\\n\\n    // Replay protection nonces.\\n    mapping(address attester => uint256 nonce) private _nonces;\\n\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\n    /// @param oldNonce The previous nonce.\\n    /// @param newNonce The new value.\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\n\\n    /// @dev Creates a new EIP1271Verifier instance.\\n    /// @param version The current major version of the signing domain\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\n        _name = name;\\n    }\\n\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\n    function getDomainSeparator() external view returns (bytes32) {\\n        return _domainSeparatorV4();\\n    }\\n\\n    /// @notice Returns the current nonce per-account.\\n    /// @param account The requested account.\\n    /// @return The current nonce.\\n    function getNonce(address account) external view returns (uint256) {\\n        return _nonces[account];\\n    }\\n\\n    /// @notice Returns the EIP712 type hash for the attest function.\\n    /// @return The EIP712 type hash for the attest function.\\n    function getAttestTypeHash() external pure returns (bytes32) {\\n        return ATTEST_TYPEHASH;\\n    }\\n\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\n    /// @return The EIP712 type hash for the revoke function.\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\n        return REVOKE_TYPEHASH;\\n    }\\n\\n    /// @notice Returns the EIP712 name.\\n    /// @return The EIP712 name.\\n    function getName() external view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\n    /// @param newNonce The (higher) new value.\\n    function increaseNonce(uint256 newNonce) external {\\n        uint256 oldNonce = _nonces[msg.sender];\\n        if (newNonce <= oldNonce) {\\n            revert InvalidNonce();\\n        }\\n\\n        _nonces[msg.sender] = newNonce;\\n\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\n    }\\n\\n    /// @dev Verifies delegated attestation request.\\n    /// @param request The arguments of the delegated attestation request.\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\n            revert DeadlineExpired();\\n        }\\n\\n        AttestationRequestData memory data = request.data;\\n        Signature memory signature = request.signature;\\n\\n        bytes32 hash = _hashTypedDataV4(\\n            keccak256(\\n                abi.encode(\\n                    ATTEST_TYPEHASH,\\n                    request.attester,\\n                    request.schema,\\n                    data.recipient,\\n                    data.expirationTime,\\n                    data.revocable,\\n                    data.refUID,\\n                    keccak256(data.data),\\n                    data.value,\\n                    _nonces[request.attester]++,\\n                    request.deadline\\n                )\\n            )\\n        );\\n        if (\\n            !SignatureChecker.isValidSignatureNow(\\n                request.attester,\\n                hash,\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\n            )\\n        ) {\\n            revert InvalidSignature();\\n        }\\n    }\\n\\n    /// @dev Verifies delegated revocation request.\\n    /// @param request The arguments of the delegated revocation request.\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\n            revert DeadlineExpired();\\n        }\\n\\n        RevocationRequestData memory data = request.data;\\n        Signature memory signature = request.signature;\\n\\n        bytes32 hash = _hashTypedDataV4(\\n            keccak256(\\n                abi.encode(\\n                    REVOKE_TYPEHASH,\\n                    request.revoker,\\n                    request.schema,\\n                    data.uid,\\n                    data.value,\\n                    _nonces[request.revoker]++,\\n                    request.deadline\\n                )\\n            )\\n        );\\n        if (\\n            !SignatureChecker.isValidSignatureNow(\\n                request.revoker,\\n                hash,\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\n            )\\n        ) {\\n            revert InvalidSignature();\\n        }\\n    }\\n\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\n    ///     current block time.\\n    function _time() internal view virtual returns (uint64) {\\n        return uint64(block.timestamp);\\n    }\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { EIP712 } from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n    AccessDenied,\\n    DeadlineExpired,\\n    Signature,\\n    InvalidEAS,\\n    InvalidLength,\\n    InvalidSignature,\\n    NotFound,\\n    NO_EXPIRATION_TIME,\\n    uncheckedInc\\n} from \\\"../../Common.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n    AttestationRequest,\\n    AttestationRequestData,\\n    IEAS,\\n    MultiAttestationRequest,\\n    MultiRevocationRequest,\\n    RevocationRequest,\\n    RevocationRequestData\\n} from \\\"../../IEAS.sol\\\";\\n\\nimport { Semver } from \\\"../../Semver.sol\\\";\\n\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\nstruct DelegatedProxyAttestationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    AttestationRequestData data; // The arguments of the attestation request.\\n    Signature signature; // The EIP712 signature data.\\n    address attester; // The attesting account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\nstruct MultiDelegatedProxyAttestationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n    address attester; // The attesting account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\nstruct DelegatedProxyRevocationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    RevocationRequestData data; // The arguments of the revocation request.\\n    Signature signature; // The EIP712 signature data.\\n    address revoker; // The revoking account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\nstruct MultiDelegatedProxyRevocationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n    address revoker; // The revoking account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @title EIP712Proxy\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\n///     signatures.\\ncontract EIP712Proxy is Semver, EIP712 {\\n    error UsedSignature();\\n\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\n    // keccak256(\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\").\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\n\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\n    // keccak256(\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\").\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\n\\n    // The global EAS contract.\\n    IEAS private immutable _eas;\\n\\n    // The user readable name of the signing domain.\\n    string private _name;\\n\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\n    // attester is able to revert attestations by proxy.\\n    mapping(bytes32 uid => address attester) private _attesters;\\n\\n    // Replay protection signatures.\\n    mapping(bytes signature => bool used) private _signatures;\\n\\n    /// @dev Creates a new EIP1271Verifier instance.\\n    /// @param eas The address of the global EAS contract.\\n    /// @param name The user readable name of the signing domain.\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\"1.4.0\\\") {\\n        if (address(eas) == address(0)) {\\n            revert InvalidEAS();\\n        }\\n\\n        _eas = eas;\\n        _name = name;\\n    }\\n\\n    /// @notice Returns the EAS.\\n    function getEAS() external view returns (IEAS) {\\n        return _eas;\\n    }\\n\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\n    function getDomainSeparator() external view returns (bytes32) {\\n        return _domainSeparatorV4();\\n    }\\n\\n    /// Returns the EIP712 type hash for the attest function.\\n    function getAttestTypeHash() external pure returns (bytes32) {\\n        return ATTEST_PROXY_TYPEHASH;\\n    }\\n\\n    /// Returns the EIP712 type hash for the revoke function.\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\n        return REVOKE_PROXY_TYPEHASH;\\n    }\\n\\n    /// Returns the EIP712 name.\\n    function getName() external view returns (string memory) {\\n        return _name;\\n    }\\n\\n    /// Returns the attester for a given uid.\\n    function getAttester(bytes32 uid) external view returns (address) {\\n        return _attesters[uid];\\n    }\\n\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\n    /// @return The UID of the new attestation.\\n    ///\\n    /// Example:\\n    ///     attestByDelegation({\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: {\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n    ///             expirationTime: 1673891048,\\n    ///             revocable: true,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x1234',\\n    ///             value: 0\\n    ///         },\\n    ///         signature: {\\n    ///             v: 28,\\n    ///             r: '0x148c...b25b',\\n    ///             s: '0x5a72...be22'\\n    ///         },\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\n    ///         deadline: 1673891048\\n    ///     })\\n    function attestByDelegation(\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\n    ) public payable virtual returns (bytes32) {\\n        _verifyAttest(delegatedRequest);\\n\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\n        );\\n\\n        _attesters[uid] = delegatedRequest.attester;\\n\\n        return uid;\\n    }\\n\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\n    /// @return The UIDs of the new attestations.\\n    ///\\n    /// Example:\\n    ///     multiAttestByDelegation([{\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: [{\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n    ///             expirationTime: 1673891048,\\n    ///             revocable: true,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x1234',\\n    ///             value: 0\\n    ///         },\\n    ///         {\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n    ///             expirationTime: 0,\\n    ///             revocable: false,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x00',\\n    ///             value: 0\\n    ///         }],\\n    ///         signatures: [{\\n    ///             v: 28,\\n    ///             r: '0x148c...b25b',\\n    ///             s: '0x5a72...be22'\\n    ///         },\\n    ///         {\\n    ///             v: 28,\\n    ///             r: '0x487s...67bb',\\n    ///             s: '0x12ad...2366'\\n    ///         }],\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\n    ///         deadline: 1673891048\\n    ///     }])\\n    function multiAttestByDelegation(\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\n    ) public payable virtual returns (bytes32[] memory) {\\n        uint256 length = multiDelegatedRequests.length;\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\n\\n            // Ensure that no inputs are missing.\\n            uint256 dataLength = data.length;\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\n                revert InvalidLength();\\n            }\\n\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n                _verifyAttest(\\n                    DelegatedProxyAttestationRequest({\\n                        schema: multiDelegatedRequest.schema,\\n                        data: data[j],\\n                        signature: multiDelegatedRequest.signatures[j],\\n                        attester: multiDelegatedRequest.attester,\\n                        deadline: multiDelegatedRequest.deadline\\n                    })\\n                );\\n            }\\n\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\n        }\\n\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\n\\n        // Store all attesters, according to the order of the attestation requests.\\n        uint256 uidCounter = 0;\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\n\\n            uint256 dataLength = data.length;\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\n\\n                unchecked {\\n                    ++uidCounter;\\n                }\\n            }\\n        }\\n\\n        return uids;\\n    }\\n\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\n    ///\\n    /// Example:\\n    ///     revokeByDelegation({\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: {\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\n    ///             value: 0\\n    ///         },\\n    ///         signature: {\\n    ///             v: 27,\\n    ///             r: '0xb593...7142',\\n    ///             s: '0x0f5b...2cce'\\n    ///         },\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n    ///         deadline: 1673891048\\n    ///     })\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\n        _verifyRevoke(delegatedRequest);\\n\\n        return\\n            _eas.revoke{ value: msg.value }(\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\n            );\\n    }\\n\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\n    ///\\n    /// Example:\\n    ///     multiRevokeByDelegation([{\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: [{\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n    ///             value: 1000\\n    ///         },\\n    ///         {\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n    ///             value: 0\\n    ///         }],\\n    ///         signatures: [{\\n    ///             v: 28,\\n    ///             r: '0x148c...b25b',\\n    ///             s: '0x5a72...be22'\\n    ///         },\\n    ///         {\\n    ///             v: 28,\\n    ///             r: '0x487s...67bb',\\n    ///             s: '0x12ad...2366'\\n    ///         }],\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n    ///         deadline: 1673891048\\n    ///     }])\\n    function multiRevokeByDelegation(\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\n    ) public payable virtual {\\n        uint256 length = multiDelegatedRequests.length;\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\n\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\n\\n            // Ensure that no inputs are missing.\\n            uint256 dataLength = data.length;\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\n                revert InvalidLength();\\n            }\\n\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n                RevocationRequestData memory requestData = data[j];\\n\\n                _verifyRevoke(\\n                    DelegatedProxyRevocationRequest({\\n                        schema: multiDelegatedRequest.schema,\\n                        data: requestData,\\n                        signature: multiDelegatedRequest.signatures[j],\\n                        revoker: multiDelegatedRequest.revoker,\\n                        deadline: multiDelegatedRequest.deadline\\n                    })\\n                );\\n            }\\n\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\n        }\\n\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\n    }\\n\\n    /// @dev Verifies delegated attestation request.\\n    /// @param request The arguments of the delegated attestation request.\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\n            revert DeadlineExpired();\\n        }\\n\\n        AttestationRequestData memory data = request.data;\\n        Signature memory signature = request.signature;\\n\\n        _verifyUnusedSignature(signature);\\n\\n        bytes32 digest = _hashTypedDataV4(\\n            keccak256(\\n                abi.encode(\\n                    ATTEST_PROXY_TYPEHASH,\\n                    request.attester,\\n                    request.schema,\\n                    data.recipient,\\n                    data.expirationTime,\\n                    data.revocable,\\n                    data.refUID,\\n                    keccak256(data.data),\\n                    data.value,\\n                    request.deadline\\n                )\\n            )\\n        );\\n\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\n            revert InvalidSignature();\\n        }\\n    }\\n\\n    /// @dev Verifies delegated revocation request.\\n    /// @param request The arguments of the delegated revocation request.\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\n            revert DeadlineExpired();\\n        }\\n\\n        RevocationRequestData memory data = request.data;\\n\\n        // Allow only original attesters to revoke their attestations.\\n        address attester = _attesters[data.uid];\\n        if (attester == address(0)) {\\n            revert NotFound();\\n        }\\n\\n        if (attester != request.revoker) {\\n            revert AccessDenied();\\n        }\\n\\n        Signature memory signature = request.signature;\\n\\n        _verifyUnusedSignature(signature);\\n\\n        bytes32 digest = _hashTypedDataV4(\\n            keccak256(\\n                abi.encode(\\n                    REVOKE_PROXY_TYPEHASH,\\n                    request.revoker,\\n                    request.schema,\\n                    data.uid,\\n                    data.value,\\n                    request.deadline\\n                )\\n            )\\n        );\\n\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\n            revert InvalidSignature();\\n        }\\n    }\\n\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\n    /// @param signature The EIP712 signature data.\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\n\\n        if (_signatures[packedSignature]) {\\n            revert UsedSignature();\\n        }\\n\\n        _signatures[packedSignature] = true;\\n    }\\n\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\n    ///     current block time.\\n    function _time() internal view virtual returns (uint64) {\\n        return uint64(block.timestamp);\\n    }\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ISchemaRegistry } from \\\"./ISchemaRegistry.sol\\\";\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\nimport { Attestation, Signature } from \\\"./Common.sol\\\";\\n\\n/// @notice A struct representing the arguments of the attestation request.\\nstruct AttestationRequestData {\\n    address recipient; // The recipient of the attestation.\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\n    bool revocable; // Whether the attestation is revocable.\\n    bytes32 refUID; // The UID of the related attestation.\\n    bytes data; // Custom attestation data.\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\n}\\n\\n/// @notice A struct representing the full arguments of the attestation request.\\nstruct AttestationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    AttestationRequestData data; // The arguments of the attestation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\nstruct DelegatedAttestationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    AttestationRequestData data; // The arguments of the attestation request.\\n    Signature signature; // The ECDSA signature data.\\n    address attester; // The attesting account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the multi attestation request.\\nstruct MultiAttestationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\nstruct MultiDelegatedAttestationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n    address attester; // The attesting account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the arguments of the revocation request.\\nstruct RevocationRequestData {\\n    bytes32 uid; // The UID of the attestation to revoke.\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\n}\\n\\n/// @notice A struct representing the full arguments of the revocation request.\\nstruct RevocationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    RevocationRequestData data; // The arguments of the revocation request.\\n}\\n\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\nstruct DelegatedRevocationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    RevocationRequestData data; // The arguments of the revocation request.\\n    Signature signature; // The ECDSA signature data.\\n    address revoker; // The revoking account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the multi revocation request.\\nstruct MultiRevocationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\nstruct MultiDelegatedRevocationRequest {\\n    bytes32 schema; // The unique identifier of the schema.\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n    address revoker; // The revoking account.\\n    uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @title IEAS\\n/// @notice EAS - Ethereum Attestation Service interface.\\ninterface IEAS is ISemver {\\n    /// @notice Emitted when an attestation has been made.\\n    /// @param recipient The recipient of the attestation.\\n    /// @param attester The attesting account.\\n    /// @param uid The UID of the new attestation.\\n    /// @param schemaUID The UID of the schema.\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\n\\n    /// @notice Emitted when an attestation has been revoked.\\n    /// @param recipient The recipient of the attestation.\\n    /// @param attester The attesting account.\\n    /// @param schemaUID The UID of the schema.\\n    /// @param uid The UID the revoked attestation.\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\n\\n    /// @notice Emitted when a data has been timestamped.\\n    /// @param data The data.\\n    /// @param timestamp The timestamp.\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\n\\n    /// @notice Emitted when a data has been revoked.\\n    /// @param revoker The address of the revoker.\\n    /// @param data The data.\\n    /// @param timestamp The timestamp.\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\n\\n    /// @notice Returns the address of the global schema registry.\\n    /// @return The address of the global schema registry.\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\n\\n    /// @notice Attests to a specific schema.\\n    /// @param request The arguments of the attestation request.\\n    /// @return The UID of the new attestation.\\n    ///\\n    /// Example:\\n    ///     attest({\\n    ///         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",\\n    ///         data: {\\n    ///             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",\\n    ///             expirationTime: 0,\\n    ///             revocable: true,\\n    ///             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",\\n    ///             data: \\\"0xF00D\\\",\\n    ///             value: 0\\n    ///         }\\n    ///     })\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\n\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\n    /// @return The UID of the new attestation.\\n    ///\\n    /// Example:\\n    ///     attestByDelegation({\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: {\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n    ///             expirationTime: 1673891048,\\n    ///             revocable: true,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x1234',\\n    ///             value: 0\\n    ///         },\\n    ///         signature: {\\n    ///             v: 28,\\n    ///             r: '0x148c...b25b',\\n    ///             s: '0x5a72...be22'\\n    ///         },\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\n    ///         deadline: 1673891048\\n    ///     })\\n    function attestByDelegation(\\n        DelegatedAttestationRequest calldata delegatedRequest\\n    ) external payable returns (bytes32);\\n\\n    /// @notice Attests to multiple schemas.\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\n    ///     schema ids to benefit from the best batching optimization.\\n    /// @return The UIDs of the new attestations.\\n    ///\\n    /// Example:\\n    ///     multiAttest([{\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\n    ///         data: [{\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n    ///             expirationTime: 1673891048,\\n    ///             revocable: true,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x1234',\\n    ///             value: 1000\\n    ///         },\\n    ///         {\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n    ///             expirationTime: 0,\\n    ///             revocable: false,\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\n    ///             data: '0x00',\\n    ///             value: 0\\n    ///         }],\\n    ///     },\\n    ///     {\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\n    ///         data: [{\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n    ///             expirationTime: 0,\\n    ///             revocable: true,\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\n    ///             data: '0x12345678',\\n    ///             value: 0\\n    ///         },\\n    ///     }])\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\n\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\n    /// @return The UIDs of the new attestations.\\n    ///\\n    /// Example:\\n    ///     multiAttestByDelegation([{\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: [{\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n    ///             expirationTime: 1673891048,\\n    ///             revocable: true,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x1234',\\n    ///             value: 0\\n    ///         },\\n    ///         {\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n    ///             expirationTime: 0,\\n    ///             revocable: false,\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n    ///             data: '0x00',\\n    ///             value: 0\\n    ///         }],\\n    ///         signatures: [{\\n    ///             v: 28,\\n    ///             r: '0x148c...b25b',\\n    ///             s: '0x5a72...be22'\\n    ///         },\\n    ///         {\\n    ///             v: 28,\\n    ///             r: '0x487s...67bb',\\n    ///             s: '0x12ad...2366'\\n    ///         }],\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\n    ///         deadline: 1673891048\\n    ///     }])\\n    function multiAttestByDelegation(\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\n    ) external payable returns (bytes32[] memory);\\n\\n    /// @notice Revokes an existing attestation to a specific schema.\\n    /// @param request The arguments of the revocation request.\\n    ///\\n    /// Example:\\n    ///     revoke({\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: {\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\n    ///             value: 0\\n    ///         }\\n    ///     })\\n    function revoke(RevocationRequest calldata request) external payable;\\n\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\n    ///\\n    /// Example:\\n    ///     revokeByDelegation({\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: {\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\n    ///             value: 0\\n    ///         },\\n    ///         signature: {\\n    ///             v: 27,\\n    ///             r: '0xb593...7142',\\n    ///             s: '0x0f5b...2cce'\\n    ///         },\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n    ///         deadline: 1673891048\\n    ///     })\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\n\\n    /// @notice Revokes existing attestations to multiple schemas.\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\n    ///     schema ids to benefit from the best batching optimization.\\n    ///\\n    /// Example:\\n    ///     multiRevoke([{\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: [{\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n    ///             value: 1000\\n    ///         },\\n    ///         {\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n    ///             value: 0\\n    ///         }],\\n    ///     },\\n    ///     {\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\n    ///         data: [{\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\n    ///             value: 0\\n    ///         },\\n    ///     }])\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\n\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\n    ///\\n    /// Example:\\n    ///     multiRevokeByDelegation([{\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n    ///         data: [{\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n    ///             value: 1000\\n    ///         },\\n    ///         {\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n    ///             value: 0\\n    ///         }],\\n    ///         signatures: [{\\n    ///             v: 28,\\n    ///             r: '0x148c...b25b',\\n    ///             s: '0x5a72...be22'\\n    ///         },\\n    ///         {\\n    ///             v: 28,\\n    ///             r: '0x487s...67bb',\\n    ///             s: '0x12ad...2366'\\n    ///         }],\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n    ///         deadline: 1673891048\\n    ///     }])\\n    function multiRevokeByDelegation(\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\n    ) external payable;\\n\\n    /// @notice Timestamps the specified bytes32 data.\\n    /// @param data The data to timestamp.\\n    /// @return The timestamp the data was timestamped with.\\n    function timestamp(bytes32 data) external returns (uint64);\\n\\n    /// @notice Timestamps the specified multiple bytes32 data.\\n    /// @param data The data to timestamp.\\n    /// @return The timestamp the data was timestamped with.\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\n\\n    /// @notice Revokes the specified bytes32 data.\\n    /// @param data The data to timestamp.\\n    /// @return The timestamp the data was revoked with.\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\n\\n    /// @notice Revokes the specified multiple bytes32 data.\\n    /// @param data The data to timestamp.\\n    /// @return The timestamp the data was revoked with.\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\n\\n    /// @notice Returns an existing attestation by UID.\\n    /// @param uid The UID of the attestation to retrieve.\\n    /// @return The attestation data members.\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\n\\n    /// @notice Checks whether an attestation exists.\\n    /// @param uid The UID of the attestation to retrieve.\\n    /// @return Whether an attestation exists.\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\n\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\n    /// @param data The data to query.\\n    /// @return The timestamp the data was timestamped with.\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\n\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\n    /// @param data The data to query.\\n    /// @return The timestamp the data was timestamped with.\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { IEAS, Attestation } from \\\"./IEAS.sol\\\";\\nimport { EMPTY_UID, uncheckedInc } from \\\"./Common.sol\\\";\\nimport { Semver } from \\\"./Semver.sol\\\";\\n\\n/// @title Indexer\\n/// @notice Indexing Service for the Ethereum Attestation Service\\ncontract Indexer is Semver {\\n    error InvalidEAS();\\n    error InvalidAttestation();\\n    error InvalidOffset();\\n\\n    /// @notice Emitted when an attestation has been indexed.\\n    /// @param uid The UID the attestation.\\n    event Indexed(bytes32 indexed uid);\\n\\n    /// A mapping between an account and its received attestations.\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\n\\n    // A mapping between an account and its sent attestations.\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\n\\n    // A mapping between a schema, attester, and recipient.\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\n        private _schemaAttesterRecipientAttestations;\\n\\n    // A mapping between a schema and its attestations.\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\n\\n    // The global mapping of attestation indexing status.\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\n\\n    // The address of the global EAS contract.\\n    IEAS private immutable _eas;\\n\\n    /// @dev Creates a new Indexer instance.\\n    /// @param eas The address of the global EAS contract.\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\n        if (address(eas) == address(0)) {\\n            revert InvalidEAS();\\n        }\\n\\n        _eas = eas;\\n    }\\n\\n    /// @notice Returns the EAS.\\n    function getEAS() external view returns (IEAS) {\\n        return _eas;\\n    }\\n\\n    /// @notice Indexes an existing attestation.\\n    /// @param attestationUID The UID of the attestation to index.\\n    function indexAttestation(bytes32 attestationUID) external {\\n        _indexAttestation(attestationUID);\\n    }\\n\\n    /// @notice Indexes multiple existing attestations.\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\n        uint256 length = attestationUIDs.length;\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n            _indexAttestation(attestationUIDs[i]);\\n        }\\n    }\\n\\n    /// @notice Returns whether an existing attestation has been already indexed.\\n    /// @param attestationUID The UID of the attestation to check.\\n    /// @return Whether an attestation has been already indexed.\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\n        return _indexedAttestations[attestationUID];\\n    }\\n\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\n    ///     recipient.\\n    /// @param recipient The recipient of the attestation.\\n    /// @param schemaUID The UID of the schema.\\n    /// @param start The offset to start from.\\n    /// @param length The number of total members to retrieve.\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n    /// @return An array of attestation UIDs.\\n    function getReceivedAttestationUIDs(\\n        address recipient,\\n        bytes32 schemaUID,\\n        uint256 start,\\n        uint256 length,\\n        bool reverseOrder\\n    ) external view returns (bytes32[] memory) {\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\n    }\\n\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\n    ///     specific recipient.\\n    /// @param recipient The recipient of the attestation.\\n    /// @param schemaUID The UID of the schema.\\n    /// @return The total number of attestations.\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\n        return _receivedAttestations[recipient][schemaUID].length;\\n    }\\n\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\n    /// @param attester The attester of the attestation.\\n    /// @param schemaUID The UID of the schema.\\n    /// @param start The offset to start from.\\n    /// @param length The number of total members to retrieve.\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n    /// @return An array of attestation UIDs.\\n    function getSentAttestationUIDs(\\n        address attester,\\n        bytes32 schemaUID,\\n        uint256 start,\\n        uint256 length,\\n        bool reverseOrder\\n    ) external view returns (bytes32[] memory) {\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\n    }\\n\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\n    /// attester.\\n    /// @param attester The attester of the attestation.\\n    /// @param schemaUID The UID of the schema.\\n    /// @return The total number of attestations.\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\n        return _sentAttestations[attester][schemaUID].length;\\n    }\\n\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\n    ///     specific recipient.\\n    /// @param schemaUID The UID of the schema.\\n    /// @param attester The attester of the attestation.\\n    /// @param recipient The recipient of the attestation.\\n    /// @param start The offset to start from.\\n    /// @param length The number of total members to retrieve.\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n    /// @return An array of attestation UIDs.\\n    function getSchemaAttesterRecipientAttestationUIDs(\\n        bytes32 schemaUID,\\n        address attester,\\n        address recipient,\\n        uint256 start,\\n        uint256 length,\\n        bool reverseOrder\\n    ) external view returns (bytes32[] memory) {\\n        return\\n            _sliceUIDs(\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\n                start,\\n                length,\\n                reverseOrder\\n            );\\n    }\\n\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\n    ///     attester to a specific recipient.\\n    /// @param schemaUID The UID of the schema.\\n    /// @param attester The attester of the attestation.\\n    /// @param recipient The recipient of the attestation.\\n    /// @return An array of attestation UIDs.\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\n        bytes32 schemaUID,\\n        address attester,\\n        address recipient\\n    ) external view returns (uint256) {\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\n    }\\n\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\n    /// @param schemaUID The UID of the schema.\\n    /// @param start The offset to start from.\\n    /// @param length The number of total members to retrieve.\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n    /// @return An array of attestation UIDs.\\n    function getSchemaAttestationUIDs(\\n        bytes32 schemaUID,\\n        uint256 start,\\n        uint256 length,\\n        bool reverseOrder\\n    ) external view returns (bytes32[] memory) {\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\n    }\\n\\n    /// @notice Returns the total number of attestations to a specific schema.\\n    /// @param schemaUID The UID of the schema.\\n    /// @return An array of attestation UIDs.\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\n        return _schemaAttestations[schemaUID].length;\\n    }\\n\\n    /// @dev Indexes an existing attestation.\\n    /// @param attestationUID The UID of the attestation to index.\\n    function _indexAttestation(bytes32 attestationUID) private {\\n        // Skip already indexed attestations.\\n        if (_indexedAttestations[attestationUID]) {\\n            return;\\n        }\\n\\n        // Check if the attestation exists.\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\n\\n        bytes32 uid = attestation.uid;\\n        if (uid == EMPTY_UID) {\\n            revert InvalidAttestation();\\n        }\\n\\n        // Index the attestation.\\n        address attester = attestation.attester;\\n        address recipient = attestation.recipient;\\n        bytes32 schemaUID = attestation.schema;\\n\\n        _indexedAttestations[attestationUID] = true;\\n        _schemaAttestations[schemaUID].push(attestationUID);\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\n\\n        emit Indexed({ uid: uid });\\n    }\\n\\n    /// @dev Returns a slice in an array of attestation UIDs.\\n    /// @param uids The array of attestation UIDs.\\n    /// @param start The offset to start from.\\n    /// @param length The number of total members to retrieve.\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n    /// @return An array of attestation UIDs.\\n    function _sliceUIDs(\\n        bytes32[] memory uids,\\n        uint256 start,\\n        uint256 length,\\n        bool reverseOrder\\n    ) private pure returns (bytes32[] memory) {\\n        uint256 attestationsLength = uids.length;\\n        if (attestationsLength == 0) {\\n            return new bytes32[](0);\\n        }\\n\\n        if (start >= attestationsLength) {\\n            revert InvalidOffset();\\n        }\\n\\n        unchecked {\\n            uint256 len = length;\\n            if (attestationsLength < start + length) {\\n                len = attestationsLength - start;\\n            }\\n\\n            bytes32[] memory res = new bytes32[](len);\\n\\n            for (uint256 i = 0; i < len; ++i) {\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\n            }\\n\\n            return res;\\n        }\\n    }\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\n\\nimport { ISchemaResolver } from \\\"./resolver/ISchemaResolver.sol\\\";\\n\\n/// @notice A struct representing a record for a submitted schema.\\nstruct SchemaRecord {\\n    bytes32 uid; // The unique identifier of the schema.\\n    ISchemaResolver resolver; // Optional schema resolver.\\n    bool revocable; // Whether the schema allows revocations explicitly.\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\n}\\n\\n/// @title ISchemaRegistry\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\ninterface ISchemaRegistry is ISemver {\\n    /// @notice Emitted when a new schema has been registered\\n    /// @param uid The schema UID.\\n    /// @param registerer The address of the account used to register the schema.\\n    /// @param schema The schema data.\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\n\\n    /// @notice Submits and reserves a new schema\\n    /// @param schema The schema data schema.\\n    /// @param resolver An optional schema resolver.\\n    /// @param revocable Whether the schema allows revocations explicitly.\\n    /// @return The UID of the new schema.\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\n\\n    /// @notice Returns an existing schema by UID\\n    /// @param uid The UID of the schema to retrieve.\\n    /// @return The schema data members.\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @title ISemver\\n/// @notice A semver interface.\\ninterface ISemver {\\n    /// @notice Returns the full semver contract version.\\n    /// @return Semver contract version as a string.\\n    function version() external view returns (string memory);\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { Attestation } from \\\"./../Common.sol\\\";\\nimport { ISemver } from \\\"./../ISemver.sol\\\";\\n\\n/// @title ISchemaResolver\\n/// @notice The interface of an optional schema resolver.\\ninterface ISchemaResolver is ISemver {\\n    /// @notice Checks if the resolver can be sent ETH.\\n    /// @return Whether the resolver supports ETH transfers.\\n    function isPayable() external pure returns (bool);\\n\\n    /// @notice Processes an attestation and verifies whether it's valid.\\n    /// @param attestation The new attestation.\\n    /// @return Whether the attestation is valid.\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\n\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\n    /// @param attestations The new attestations.\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\n    /// @return Whether all the attestations are valid.\\n    function multiAttest(\\n        Attestation[] calldata attestations,\\n        uint256[] calldata values\\n    ) external payable returns (bool);\\n\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\n    /// @param attestation The existing attestation to be revoked.\\n    /// @return Whether the attestation can be revoked.\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\n\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\n    /// @param attestations The existing attestations to be revoked.\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\n    /// @return Whether the attestations can be revoked.\\n    function multiRevoke(\\n        Attestation[] calldata attestations,\\n        uint256[] calldata values\\n    ) external payable returns (bool);\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { ISchemaResolver } from \\\"./resolver/ISchemaResolver.sol\\\";\\n\\nimport { EMPTY_UID } from \\\"./Common.sol\\\";\\nimport { Semver } from \\\"./Semver.sol\\\";\\nimport { ISchemaRegistry, SchemaRecord } from \\\"./ISchemaRegistry.sol\\\";\\n\\n/// @title SchemaRegistry\\n/// @notice The global schema registry.\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\n    error AlreadyExists();\\n\\n    // The global mapping between schema records and their IDs.\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\n\\n    /// @dev Creates a new SchemaRegistry instance.\\n    constructor() Semver(1, 3, 0) {}\\n\\n    /// @inheritdoc ISchemaRegistry\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\n            uid: EMPTY_UID,\\n            schema: schema,\\n            resolver: resolver,\\n            revocable: revocable\\n        });\\n\\n        bytes32 uid = _getUID(schemaRecord);\\n        if (_registry[uid].uid != EMPTY_UID) {\\n            revert AlreadyExists();\\n        }\\n\\n        schemaRecord.uid = uid;\\n        _registry[uid] = schemaRecord;\\n\\n        emit Registered(uid, msg.sender, schemaRecord);\\n\\n        return uid;\\n    }\\n\\n    /// @inheritdoc ISchemaRegistry\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\n        return _registry[uid];\\n    }\\n\\n    /// @dev Calculates a UID for a given schema.\\n    /// @param schemaRecord The input schema.\\n    /// @return schema UID.\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\n    }\\n}\\n\"\n    },\n    \"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.4;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\n\\n/// @title Semver\\n/// @notice A simple contract for managing contract versions.\\ncontract Semver is ISemver {\\n    // Contract's major version number.\\n    uint256 private immutable _major;\\n\\n    // Contract's minor version number.\\n    uint256 private immutable _minor;\\n\\n    // Contract's patch version number.\\n    uint256 private immutable _patch;\\n\\n    /// @dev Create a new Semver instance.\\n    /// @param major Major version number.\\n    /// @param minor Minor version number.\\n    /// @param patch Patch version number.\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\n        _major = major;\\n        _minor = minor;\\n        _patch = patch;\\n    }\\n\\n    /// @notice Returns the full semver contract version.\\n    /// @return Semver contract version as a string.\\n    function version() external view returns (string memory) {\\n        return\\n            string(\\n                abi.encodePacked(Strings.toString(_major), \\\".\\\", Strings.toString(_minor), \\\".\\\", Strings.toString(_patch))\\n            );\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC5267.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\n\\npragma solidity ^0.8.20;\\n\\ninterface IERC5267 {\\n    /**\\n     * @dev MAY be emitted to signal that the domain could have changed.\\n     */\\n    event EIP712DomainChanged();\\n\\n    /**\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\n     * signature.\\n     */\\n    function eip712Domain()\\n        external\\n        view\\n        returns (\\n            bytes1 fields,\\n            string memory name,\\n            string memory version,\\n            uint256 chainId,\\n            address verifyingContract,\\n            bytes32 salt,\\n            uint256[] memory extensions\\n        );\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Address.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\n     */\\n    error AddressInsufficientBalance(address account);\\n\\n    /**\\n     * @dev There's no code at `target` (it is not a contract).\\n     */\\n    error AddressEmptyCode(address target);\\n\\n    /**\\n     * @dev A call to an address target failed. The target may have reverted.\\n     */\\n    error FailedInnerCall();\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        if (address(this).balance < amount) {\\n            revert AddressInsufficientBalance(address(this));\\n        }\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        if (!success) {\\n            revert FailedInnerCall();\\n        }\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\n     * up by this function (like regular Solidity function calls). However, if\\n     * the call reverted with no returned reason, this function reverts with a\\n     * {FailedInnerCall} error.\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        if (address(this).balance < value) {\\n            revert AddressInsufficientBalance(address(this));\\n        }\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\\n     * unsuccessful call.\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata\\n    ) internal view returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            // only check if target is a contract if the call was successful and the return data is empty\\n            // otherwise we already know that it was a contract\\n            if (returndata.length == 0 && target.code.length == 0) {\\n                revert AddressEmptyCode(target);\\n            }\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n     * revert reason or with a default {FailedInnerCall} error.\\n     */\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\\n     */\\n    function _revert(bytes memory returndata) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert FailedInnerCall();\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS\\n    }\\n\\n    /**\\n     * @dev The signature derives the `address(0)`.\\n     */\\n    error ECDSAInvalidSignature();\\n\\n    /**\\n     * @dev The signature has an invalid length.\\n     */\\n    error ECDSAInvalidSignatureLength(uint256 length);\\n\\n    /**\\n     * @dev The signature has an S value that is in the upper half order.\\n     */\\n    error ECDSAInvalidSignatureS(bytes32 s);\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\n     * and a bytes32 providing additional information about the error.\\n     *\\n     * If no error is returned, then the address can be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\n        _throwError(error, errorArg);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\n        unchecked {\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\n            return tryRecover(hash, v, r, s);\\n        }\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\n        _throwError(error, errorArg);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError, bytes32) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\n        }\\n\\n        return (signer, RecoverError.NoError, bytes32(0));\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\n        _throwError(error, errorArg);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\n     */\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert ECDSAInvalidSignature();\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert ECDSAInvalidSignatureS(errorArg);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {MessageHashUtils} from \\\"./MessageHashUtils.sol\\\";\\nimport {ShortStrings, ShortString} from \\\"../ShortStrings.sol\\\";\\nimport {IERC5267} from \\\"../../interfaces/IERC5267.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\n *\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n */\\nabstract contract EIP712 is IERC5267 {\\n    using ShortStrings for *;\\n\\n    bytes32 private constant TYPE_HASH =\\n        keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n    // invalidate the cached domain separator if the chain id changes.\\n    bytes32 private immutable _cachedDomainSeparator;\\n    uint256 private immutable _cachedChainId;\\n    address private immutable _cachedThis;\\n\\n    bytes32 private immutable _hashedName;\\n    bytes32 private immutable _hashedVersion;\\n\\n    ShortString private immutable _name;\\n    ShortString private immutable _version;\\n    string private _nameFallback;\\n    string private _versionFallback;\\n\\n    /**\\n     * @dev Initializes the domain separator and parameter caches.\\n     *\\n     * The meaning of `name` and `version` is specified in\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n     *\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n     * - `version`: the current major version of the signing domain.\\n     *\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n     * contract upgrade].\\n     */\\n    constructor(string memory name, string memory version) {\\n        _name = name.toShortStringWithFallback(_nameFallback);\\n        _version = version.toShortStringWithFallback(_versionFallback);\\n        _hashedName = keccak256(bytes(name));\\n        _hashedVersion = keccak256(bytes(version));\\n\\n        _cachedChainId = block.chainid;\\n        _cachedDomainSeparator = _buildDomainSeparator();\\n        _cachedThis = address(this);\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for the current chain.\\n     */\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\n            return _cachedDomainSeparator;\\n        } else {\\n            return _buildDomainSeparator();\\n        }\\n    }\\n\\n    function _buildDomainSeparator() private view returns (bytes32) {\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\n    }\\n\\n    /**\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\n     *\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n     *\\n     * ```solidity\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n     *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n     *     mailTo,\\n     *     keccak256(bytes(mailContents))\\n     * )));\\n     * address signer = ECDSA.recover(digest, signature);\\n     * ```\\n     */\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\n    }\\n\\n    /**\\n     * @dev See {IERC-5267}.\\n     */\\n    function eip712Domain()\\n        public\\n        view\\n        virtual\\n        returns (\\n            bytes1 fields,\\n            string memory name,\\n            string memory version,\\n            uint256 chainId,\\n            address verifyingContract,\\n            bytes32 salt,\\n            uint256[] memory extensions\\n        )\\n    {\\n        return (\\n            hex\\\"0f\\\", // 01111\\n            _EIP712Name(),\\n            _EIP712Version(),\\n            block.chainid,\\n            address(this),\\n            bytes32(0),\\n            new uint256[](0)\\n        );\\n    }\\n\\n    /**\\n     * @dev The name parameter for the EIP712 domain.\\n     *\\n     * NOTE: By default this function reads _name which is an immutable value.\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function _EIP712Name() internal view returns (string memory) {\\n        return _name.toStringWithFallback(_nameFallback);\\n    }\\n\\n    /**\\n     * @dev The version parameter for the EIP712 domain.\\n     *\\n     * NOTE: By default this function reads _version which is an immutable value.\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function _EIP712Version() internal view returns (string memory) {\\n        return _version.toStringWithFallback(_versionFallback);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Strings} from \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\n *\\n * The library provides methods for generating a hash of a message that conforms to the\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\n * specifications.\\n */\\nlibrary MessageHashUtils {\\n    /**\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\n     * `0x45` (`personal_sign` messages).\\n     *\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\n     * `\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"` and hashing the result. It corresponds with the\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\n     *\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\n     * be re-hashed.\\n     *\\n     * See {ECDSA-recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\") // 32 is the bytes-length of messageHash\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\n     * `0x45` (`personal_sign` messages).\\n     *\\n     * The digest is calculated by prefixing an arbitrary `message` with\\n     * `\\\"\\\\x19Ethereum Signed Message:\\\\n\\\" + len(message)` and hashing the result. It corresponds with the\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\n     *\\n     * See {ECDSA-recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\n        return\\n            keccak256(bytes.concat(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", bytes(Strings.toString(message.length)), message));\\n    }\\n\\n    /**\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\n     * `0x00` (data with intended validator).\\n     *\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\"\\\\x19\\\\x00\\\"` and the intended\\n     * `validator` address. Then hashing the result.\\n     *\\n     * See {ECDSA-recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(hex\\\"19_00\\\", validator, data));\\n    }\\n\\n    /**\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\n     *\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\n     * `\\\\x19\\\\x01` and hashing the result. It corresponds to the hash signed by the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\n     *\\n     * See {ECDSA-recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, hex\\\"19_01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            digest := keccak256(ptr, 0x42)\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {ECDSA} from \\\"./ECDSA.sol\\\";\\nimport {IERC1271} from \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Safe Wallet (previously Gnosis Safe).\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Muldiv operation overflow.\\n     */\\n    error MathOverflowedMulDiv();\\n\\n    enum Rounding {\\n        Floor, // Toward negative infinity\\n        Ceil, // Toward positive infinity\\n        Trunc, // Toward zero\\n        Expand // Away from zero\\n    }\\n\\n    /**\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n     */\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        unchecked {\\n            uint256 c = a + b;\\n            if (c < a) return (false, 0);\\n            return (true, c);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n     */\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        unchecked {\\n            if (b > a) return (false, 0);\\n            return (true, a - b);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n     */\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        unchecked {\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n            // benefit is lost if 'b' is also tested.\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n            if (a == 0) return (true, 0);\\n            uint256 c = a * b;\\n            if (c / a != b) return (false, 0);\\n            return (true, c);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n     */\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        unchecked {\\n            if (b == 0) return (false, 0);\\n            return (true, a / b);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n     */\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n        unchecked {\\n            if (b == 0) return (false, 0);\\n            return (true, a % b);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\n     * of rounding towards zero.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        if (b == 0) {\\n            // Guarantee the same behavior as in a regular Solidity division.\\n            return a / b;\\n        }\\n\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\n     * denominator == 0.\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\n     * Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            if (denominator <= prod1) {\\n                revert MathOverflowedMulDiv();\\n            }\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\n\\n            uint256 twos = denominator & (0 - denominator);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\n            // works in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\n     * towards zero.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\n     */\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\n        return uint8(rounding) % 2 == 1;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/ShortStrings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {StorageSlot} from \\\"./StorageSlot.sol\\\";\\n\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\n// | length  | 0x                                                              BB |\\ntype ShortString is bytes32;\\n\\n/**\\n * @dev This library provides functions to convert short memory strings\\n * into a `ShortString` type that can be used as an immutable variable.\\n *\\n * Strings of arbitrary length can be optimized using this library if\\n * they are short enough (up to 31 bytes) by packing them with their\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\n * fallback mechanism can be used for every other case.\\n *\\n * Usage example:\\n *\\n * ```solidity\\n * contract Named {\\n *     using ShortStrings for *;\\n *\\n *     ShortString private immutable _name;\\n *     string private _nameFallback;\\n *\\n *     constructor(string memory contractName) {\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\n *     }\\n *\\n *     function name() external view returns (string memory) {\\n *         return _name.toStringWithFallback(_nameFallback);\\n *     }\\n * }\\n * ```\\n */\\nlibrary ShortStrings {\\n    // Used as an identifier for strings longer than 31 bytes.\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\n\\n    error StringTooLong(string str);\\n    error InvalidShortString();\\n\\n    /**\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\n     *\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\n     */\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\n        bytes memory bstr = bytes(str);\\n        if (bstr.length > 31) {\\n            revert StringTooLong(str);\\n        }\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\n    }\\n\\n    /**\\n     * @dev Decode a `ShortString` back to a \\\"normal\\\" string.\\n     */\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\n        uint256 len = byteLength(sstr);\\n        // using `new string(len)` would work locally but is not memory safe.\\n        string memory str = new string(32);\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(str, len)\\n            mstore(add(str, 0x20), sstr)\\n        }\\n        return str;\\n    }\\n\\n    /**\\n     * @dev Return the length of a `ShortString`.\\n     */\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\n        if (result > 31) {\\n            revert InvalidShortString();\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\n     */\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\n        if (bytes(value).length < 32) {\\n            return toShortString(value);\\n        } else {\\n            StorageSlot.getStringSlot(store).value = value;\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\n        }\\n    }\\n\\n    /**\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\n     */\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\n            return toString(value);\\n        } else {\\n            return store;\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\n     * {setWithFallback}.\\n     *\\n     * WARNING: This will return the \\\"byte length\\\" of the string. This may not reflect the actual length in terms of\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\n     */\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\n            return byteLength(value);\\n        } else {\\n            return bytes(store).length;\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/StorageSlot.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(newImplementation.code.length > 0);\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Math} from \\\"./math/Math.sol\\\";\\nimport {SignedMath} from \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant HEX_DIGITS = \\\"0123456789abcdef\\\";\\n    uint8 private constant ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev The `value` string doesn't fit in the specified `length`.\\n     */\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\n        return string.concat(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value)));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        uint256 localValue = value;\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\n            localValue >>= 4;\\n        }\\n        if (localValue != 0) {\\n            revert StringsInsufficientHexLength(value, length);\\n        }\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\n     * representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/EAS.sol\": {\n      \"content\": \"// SPDX-License-Identifier: UNLICENSED\\npragma solidity >0.0.0;\\nimport '@ethereum-attestation-service/eas-contracts/contracts/EAS.sol';\\n\"\n    },\n    \"contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\": {\n      \"content\": \"// SPDX-License-Identifier: UNLICENSED\\npragma solidity >0.0.0;\\nimport '@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol';\\n\"\n    },\n    \"contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\": {\n      \"content\": \"// SPDX-License-Identifier: UNLICENSED\\npragma solidity >0.0.0;\\nimport '@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol';\\n\"\n    },\n    \"contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol\": {\n      \"content\": \"// SPDX-License-Identifier: UNLICENSED\\npragma solidity >0.0.0;\\nimport '@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol';\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 1000000\n    },\n    \"evmVersion\": \"paris\",\n    \"metadata\": {\n      \"bytecodeHash\": \"none\",\n      \"useLiteralContent\": true\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getName()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getName(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getName(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getName(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getName(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getName(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  Indexer,\n  IndexerInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x610160346200030457601f19906001600160401b0390601f62004c8b38819003918201851683019184831184841017620003095780849260409485528339602093849181010312620003045751916001600160a01b0383168084036200030457818351966200006e886200031f565b60038852818801966245415360e81b885285516200008c816200031f565b6004958187809352019863302e323760e01b8a528a5190209820988860e05261010099808b524660a0528751858101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9b8c84528a83015260608201524660808201523060a082015260a0815260c0810181811085821117620002ef5789525190206080523060c0526101209889528051918211620002da576000938454916001928381811c91168015620002cf575b83821014620002bc57601f811162000271575b5081601f85116001146200020b5750839450908392918694620001ff575b50501b916000199060031b1c19161790555b15620001f15750610140918252519161494f93846200033c8539608051846143de015260a05184614499015260c051846143af015260e0518461442d015251836144530152518261440a0152518181816102a901528181611e660152818161269001528181612d9c015261301a0152f35b90516311a1e69760e01b8152fd5b0151925038806200016e565b9294849081168780528488209488905b888383106200025657505050106200023c575b505050811b01905562000180565b015160001960f88460031b161c191690553880806200022e565b8587015188559096019594850194879350908101906200021b565b868052828720601f860160051c810191848710620002b1575b601f0160051c019084905b828110620002a557505062000150565b88815501849062000295565b90915081906200028a565b634e487b7160e01b875260228952602487fd5b90607f16906200013d565b604186634e487b7160e01b6000525260246000fd5b604189634e487b7160e01b6000525260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117620003095760405256fe61016060406101405280610140515260048036101561001d57600080fd5b600091823560e01c90816312b11a171461118d5750806313893f611461110557806317d7de7c14610fe25780632d0335ab14610f7a57806344adc90e14610e715780634692626714610e125780634cb7e9e514610d095780634d00307014610cc0578063831e05a114610a71578063a3112a6414610a07578063b469318d14610987578063b83010d31461092c578063cf190f34146108e2578063d45c44351461088c578063e13458fc14610790578063e30bb56314610739578063e45d03f9146104b1578063e57a6b1b1461039b578063e71ff36514610310578063ed24911d146102cd578063f10b5cc81461025c578063f17325e7146101ae5763ffa1ad741461012857600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5761014051516101a6916101688261141f565b81527f302e3237000000000000000000000000000000000000000000000000000000006020820152610140515191829160208352602083019061123e565b0390f35b5080fd5b50907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc906020823601126102595782359267ffffffffffffffff84116101aa578301916101405190843603011261025957602061024e8161024786866102296102156114eb565b92610224602436920184611553565b6115d6565b61023283611586565b5261023c82611586565b503491339135611df1565b0151611586565b516101405151908152f35b80fd5b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610140515173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610306614398565b6101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff918282116103975761035f913691016111e5565b90914216925b818110610379576020846101405151908152f35b806103918561038b6001948688611a39565b356141c0565b01610365565b8380fd5b5060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101405151906103d58261139c565b358082526103e236611981565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126104ad57610140515161041f81611403565b60643560ff811681036104a9578152608435602082015260a435610140518201526101405183015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361039757610479838260606104a596015261487c565b610481611932565b61048a36611981565b61049382611586565b5261049d81611586565b503492612d4f565b5080f35b8480fd5b8280fd5b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5767ffffffffffffffff82358181116104a95784926104ff8592369084016111e5565b91903493865b848110610510578780f35b6105208186859a9798999a61189e565b906080823603126107315761014051519761053a8961139c565b82358952858301358a811161073557830196601f973689820112156101aa5761056990369089813591016119c7565b94878b01958652610140518501358c81116104ad5785019836908a0112156101aa57883596610597886114d3565b996105a761014051519b8c611458565b888b52898b018a6060809b0283010191368311610731578b808c9201925b84841061071957505090506105e591508d6101405101978c8952016112a4565b96888d0197885251998a51801591821561070d575b50506106e257825b8a51811015610673578061066d8c8f8b8b8f926106448761063c60019a73ffffffffffffffffffffffffffffffffffffffff9451986115c2565b5193516115c2565b51925116926101405151946106588661139c565b8552840152610140518301528c82015261487c565b01610602565b5099986106d6949897506001955083906106d0939d97929c519073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d018c1494511691612fcc565b90611862565b91969195929301610505565b5061014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508e806105fa565b6107233685611698565b8152019101908b8b916105c5565b8580fd5b8780fd5b5090346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061078483356000526002602052604060002054151590565b61014051519015158152f35b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916020833601126102595767ffffffffffffffff9282358481116104ad5760c08185019282360301126104ad576101405151946107ee8661139c565b82359485875260248301948535928311610259575060209661086b6102479561085860a461024e9a9761082b8d9b986108849836918401016115d6565b8b87015261083c3660448301611698565b61014051870152019361084e856112a4565b60608201526144bf565b6102246108636114eb565b953692611553565b61087484611586565b5261087e83611586565b506116d6565b903492611df1565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff913581526003835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff421680923533614266565b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061014051517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b50346101aa57610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff6109e3611281565b16825283526101405181206024358252835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a691610a5b91610a47611a49565b503581526002602052610140519020611ae7565b6101405151918291602083526020830190611300565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff81116104ad57610abb8391369084016111e5565b9092610ac6826116f7565b9383346101205280935b808510610af2576101a6610ae4878961432b565b6101405151918291826112c5565b9091929394610b0286838661189e565b610b0f602082018261179e565b80929192158015610ca6575b610c7b578560608301928035915b838110610bbb57505092602092610b829260019695610b7c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494610b7461012051956116d6565b9336916117f2565b9061261e565b610b90815161012051611862565b61012052018051610ba1898b6115c2565b52610bac888a6115c2565b50515101950193929190610ad0565b610bca8160051b870187611553565b610bd9610140518401846118de565b831015610c4f576001929173ffffffffffffffffffffffffffffffffffffffff610c4992610c37610c098b6116d6565b91610c26610140515195610c1c8761139c565b8b875236906115d6565b602086015236906060880201611698565b610140518401521660608201526144bf565b01610b29565b60248b60328f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8761014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b50610cb6610140518301836118de565b9050811415610b1b565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff42168092356141c0565b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad57813567ffffffffffffffff928382116104a957610d54913691016111e5565b8493919290345b818610610d66578680f35b610d7186838761175e565b838101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215610e0e57810191823592868411610e0a578501928060061b36038413610e0a57600193826106d092610e0295610dfb8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494339336916119c7565b9035612fcc565b950194610d5b565b8980fd5b8880fd5b5060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576104a590610e49611932565b90610e5336611981565b610e5c83611586565b52610e6682611586565b503491339135612d4f565b50602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5780359067ffffffffffffffff821161039757610ebe9084923691016111e5565b90610ec8826116f7565b93833490937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610610f06576101a6610ae4888a61432b565b90919293949560019085610f51610f488a8888610f24838a8f61175e565b610f41610f338883018361179e565b9390951494339336916117f2565b903561261e565b96875190611862565b95018051610f5f8a8c6115c2565b52610f6a898b6115c2565b5051510196019493929190610ef2565b82346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595760209073ffffffffffffffffffffffffffffffffffffffff610fca611281565b16815260018252610140519020546101405151908152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595761014051519080805461102381611a94565b808552916001918083169081156110bd5750600114611063575b6101a68561104d81870382611458565b610140515191829160208352602083019061123e565b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106110a557505050810160200161104d826101a661103d565b8054602085870181019190915290930192810161108a565b8695506101a69693506020925061104d9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929361103d565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff9182821161039757611154913691016111e5565b90914216925b81811061116e576020846101405151908152f35b80611187856111806001948688611a39565b3533614266565b0161115a565b8390346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156112165782359167ffffffffffffffff8311611216576020808501948460051b01011161121657565b600080fd5b60005b83811061122e5750506000910152565b818101518382015260200161121e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361127a8151809281875287808801910161121b565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b6020908160408183019282815285518094520193019160005b8281106112ec575050505090565b8351855293810193928101926001016112de565b9061139991805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e08301526101008082015115159083015261012080910151916101408092820152019061123e565b90565b6080810190811067ffffffffffffffff8211176113b857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176113b857604052565b6060810190811067ffffffffffffffff8211176113b857604052565b6040810190811067ffffffffffffffff8211176113b857604052565b610140810190811067ffffffffffffffff8211176113b857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b857604052565b67ffffffffffffffff81116113b857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116113b85760051b60200190565b6040908151916114fa8361141f565b60018352829160005b60208082101561154b5783516020929161151c826113e7565b6000825260008183015260008683015260606000818401526080830152600060a0830152828801015201611503565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215611216570190565b8051156115935760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156115935760209160051b010190565b91909160c08184031261121657604051906115f0826113e7565b81936115fb826112a4565b835260209167ffffffffffffffff8184013581811681036112165784860152604082013580151581036112165760408601526060820135606086015260808201359081116112165781019180601f840112156112165782359261165d84611499565b9161166b6040519384611458565b84835285858301011161121657848460a09695879660009401838601378301015260808501520135910152565b9190826060910312611216576040516116b081611403565b8092803560ff811681036112165760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036112165790565b90611701826114d3565b61170e6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061173c82946114d3565b019060005b82811061174d57505050565b806060602080938501015201611741565b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff821161121657602001918160051b3603831361121657565b929190926117ff846114d3565b9161180d6040519384611458565b829480845260208094019060051b8301928284116112165780915b84831061183757505050505050565b823567ffffffffffffffff811161121657869161185786849386016115d6565b815201920191611828565b9190820391821161186f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff82116112165760200191606082023603831361121657565b6040908151916119418361141f565b600183528291600091825b602080821015611978578251602092916119658261141f565b868252868183015282890101520161194c565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261121657604051906119b88261141f565b60243582526044356020830152565b9291926119d3826114d3565b6040926119e284519283611458565b819581835260208093019160061b84019381851161121657915b848310611a0b57505050505050565b8583830312611216578386918251611a228161141f565b8535815282860135838201528152019201916119fc565b91908110156115935760051b0190565b60405190611a568261143b565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c92168015611add575b6020831014611aae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611aa3565b9060405191611af58361143b565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c1615156101008501520190604051938492600092815491611b9283611a94565b80875292828116908115611c075750600114611bc1575b505050506101209291611bbd910384611458565b0152565b60009081528381209695945091905b818310611bef57509394509192509082010181611bbd61012038611ba9565b86548884018501529586019587945091830191611bd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b830101905081611bbd61012038611ba9565b60405190611c548261141f565b6060602083600081520152565b90611c6b826114d3565b611c786040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ca682946114d3565b0190602036910137565b5190811515820361121657565b906020808383031261121657825167ffffffffffffffff938482116112165701926080848403126112165760405193611cf58561139c565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036112165783860152611d2a60408201611cb0565b60408601526060810151918211611216570182601f8201121561121657805190611d5382611499565b93611d616040519586611458565b8285528383830101116112165782611d7c938501910161121b565b606082015290565b90611d8e826114d3565b611d9b6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611dc982946114d3565b019060005b828110611dda57505050565b602090611de5611a49565b82828501015201611dce565b9192608052611dfe611c47565b50805190611e0a611c47565b60a052611e1682611c61565b602060a05101526040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815283600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015612612576000610100526125ec575b506101005151156125c2579091611eaf83611d84565b60e052611ebb83611c61565b60c0526000915b838310611eed575050505050611ee360805160c05160e051610100516132bc565b60a0515260a05190565b611efd83829793949596976115c2565b519167ffffffffffffffff60208401511680151590816125ad575b506125835760406101005101511580612576575b61254c5760608301519567ffffffffffffffff6020850151169673ffffffffffffffffffffffffffffffffffffffff85511660408601511515906080870151926040519a611f798c61143b565b60008c528960208d015267ffffffffffffffff421660408d015260608c0152600060808c015260a08b015260c08a015273ffffffffffffffffffffffffffffffffffffffff8a1660e08a015261010089015261012088015260005b602088015160c08901516120dd609d60e08c015160408d01518d60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182611458565b51902080600052600260205260406000205415612103575060010163ffffffff16611fd4565b905097969293909495919780845280600052600260205260406000209184518355602085015160018401556121df6002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b85789946122c16006840154611a94565b601f81116124f1575b50602090601f8311600114612424576006929160009183612419575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060810151806123c9575b5073ffffffffffffffffffffffffffffffffffffffff9060019561234a8660e0516115c2565b526123578560e0516115c2565b5060a08101516123698660c0516115c2565b528261237b86602060a05101516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8b1693a401919290611ec2565b6123e29193506000526002602052604060002054151590565b156123ef57869138612324565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806122e6565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106124d65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061249f575b505050811b01910155612319565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612491565b8183015184558d985060019093019260209283019201612435565b90919293949550600684016000526020600020601f840160051c810160208510612545575b908c979695949392915b601f830160051c820181106125365750506122ca565b600081558d9850600101612520565b5080612516565b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408301511515611f2c565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff4216101538611f18565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b612608903d806000833e6126008183611458565b810190611cbd565b6101005238611e99565b6040513d6000823e3d90fd5b929094939161262b611c47565b50855193612637611c47565b9461264181611c61565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561261257600092612d32575b508151156125c257929790916126d684611d84565b986126e085611c61565b946000935b818510612702575050505050956126fd949596613520565b815290565b919593989496999092976127168a846115c2565b519a67ffffffffffffffff60208d0151168015159081612d1d575b506125835760408901511580612d10575b61254c57899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f906127938261143b565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b6128be609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b519020806000526002602052604060002054156128e4575060010163ffffffff166127ed565b90509d979b9199929a949d9c909698939c80845280600052600260205260406000209184518355602085015160018401556129c66002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b8578894612aa86006840154611a94565b601f8111612cb5575b50602090601f8311600114612be8576006929160009183612bdd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180612bb0575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b46848660019e612b4083612b5e9a6115c2565b526115c2565b50612b568460a0890151926115c2565b5201516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a6126e5565b92505050612bcd9193506000526002602052604060002054151590565b156123ef5785918d8b8b38612b0e565b015190503880612acd565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085168110612c9a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610612c63575b505050811b01910155612b00565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612c55565b8183015184558c985060019093019260209283019201612bf9565b90919293949550600684016000526020600020601f840160051c810160208510612d09575b908b979695949392915b601f830160051c82018110612cfa575050612ab1565b600081558c9850600101612ce4565b5080612cda565b5060408c01511515612742565b905067ffffffffffffffff4216101538612731565b612d489192503d806000833e6126008183611458565b90386126c1565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561261257600091612fb1575b508051156125c2578251612de081611d84565b92612dea82611c61565b9460005b838110612e045750505050611399949550613701565b612e0e81836115c2565b5190815160005260028060205260406000208054156123ef57856001820154036125c2578c73ffffffffffffffffffffffffffffffffffffffff6005830154911673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8282015460801c16612f5d5790810180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c9190612ee282611ae7565b612eec858c6115c2565b52612ef7848b6115c2565b506020810151612f07858d6115c2565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a401612dee565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b612fc691503d806000833e6126008183611458565b38612dcd565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612612576000916131ed575b508051156125c257865161305e81611d84565b9261306882611c61565b9460005b8381106130825750505050611399959650613900565b61308c818c6115c2565b519081516000526002918260205260406000208054156123ef57846001820154036125c257600581015473ffffffffffffffffffffffffffffffffffffffff871673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8482015460801c16612f5d5792830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261315d81611ae7565b613167848b6115c2565b52613172838a6115c2565b506020820151613182848c6115c2565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161306c565b61320291503d806000833e6126008183611458565b3861304b565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061327157505050508281830391015281808451928381520193019160005b82811061325d575050505090565b83518552938101939281019260010161324f565b909192959485806132ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51611300565b979801949391909101910161322e565b9092918351936001908186146134ff5773ffffffffffffffffffffffffffffffffffffffff602080950151169182156134cf579560009687915b8083106133c1575050509183929161333f9492876040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af19081156126125760009161338d575b509050156133635761139990614091565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d83116133ba575b6133a18183611458565b8101031261025957506133b390611cb0565b8038613352565b503d613397565b909197966133cf89876115c2565b5180151580613449575b61341f578181116133f5578084920398019801909190916132f6565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613490575b50156133d9565b908982813d83116134be575b6134a68183611458565b8101031261025957506134b890611cb0565b38613489565b503d61349c565b513d6000823e3d90fd5b9594505050905060005b8281106134e95750505050600090565b6134f381836115c2565b5161341f5783016134d9565b6113999550613519915061351290611586565b5191611586565b5191613ad8565b9093918451946001908187146136e45773ffffffffffffffffffffffffffffffffffffffff602080950151169182156136b3579660009788915b80831061360357505050918392916135a39492886040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916135cf575b50905015613363576135c6575090565b61139990614091565b82813d83116135fc575b6135e38183611458565b8101031261025957506135f590611cb0565b80386135b6565b503d6135d9565b909198976136118a876115c2565b5180151580613637575b61341f578181116133f55780849203990199019091909161355a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c5575060009161367e575b501561361b565b908982813d83116136ac575b6136948183611458565b8101031261025957506136a690611cb0565b38613677565b503d61368a565b969550505091505060005b8281106136ce5750505050600090565b6136d881836115c2565b5161341f5783016136be565b61139996506136fa915061351290959495611586565b5191613c5f565b9092918351936001908186146138e65773ffffffffffffffffffffffffffffffffffffffff602080950151169182156138b6579560009687915b80831061380657505050918392916137849492876040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916137d2575b509050156137a85761139990614091565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d83116137ff575b6137e68183611458565b8101031261025957506137f890611cb0565b8038613797565b503d6137dc565b9091979661381489876115c2565b518015158061383a575b61341f578181116133f55780849203980198019091909161373b565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613881575b501561381e565b908982813d83116138af575b6138978183611458565b8101031261025957506138a990611cb0565b3861387a565b503d61388d565b9594505050905060005b8281106138d05750505050600090565b6138da81836115c2565b5161341f5783016138c0565b61139995506138f9915061351290611586565b5191613dc7565b909391845194600190818714613abb5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613a8a579660009788915b8083106139da57505050918392916139839492886040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916139a6575b509050156137a8576135c6575090565b82813d83116139d3575b6139ba8183611458565b8101031261025957506139cc90611cb0565b8038613996565b503d6139b0565b909198976139e88a876115c2565b5180151580613a0e575b61341f578181116133f55780849203990199019091909161393a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613a55575b50156139f2565b908982813d8311613a83575b613a6b8183611458565b810103126102595750613a7d90611cb0565b38613a4e565b503d613a61565b969550505091505060005b828110613aa55750505050600090565b613aaf81836115c2565b5161341f578301613a95565b6113999650613ad1915061351290959495611586565b5191613f41565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613bd8575b61341f578385116133f557613b54829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613ba4575b50905015613b7a57816113999103614091565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613bd1575b613bb88183611458565b810103126102595750613bca90611cb0565b8038613b67565b503d613bae565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613c1d575b5015613b06565b908382813d8311613c4b575b613c338183611458565b810103126102595750613c4590611cb0565b38613c16565b503d613c29565b5050505061341f57600090565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580613d3f575b61341f578486116133f557613cdb829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613d0b575b50905015613b7a578290613d0157505090565b6113999103614091565b82813d8311613d38575b613d1f8183611458565b810103126102595750613d3190611cb0565b8038613cee565b503d613d15565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613d84575b5015613c8d565b908382813d8311613db2575b613d9a8183611458565b810103126102595750613dac90611cb0565b38613d7d565b503d613d90565b505050505061341f57600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613ec7575b61341f578385116133f557613e43829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613e93575b50905015613e6957816113999103614091565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613ec0575b613ea78183611458565b810103126102595750613eb990611cb0565b8038613e56565b503d613e9d565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613f0c575b5015613df5565b908382813d8311613f3a575b613f228183611458565b810103126102595750613f3490611cb0565b38613f05565b503d613f18565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580614017575b61341f578486116133f557613fbd829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613fe3575b50905015613e69578290613d0157505090565b82813d8311614010575b613ff78183611458565b81010312610259575061400990611cb0565b8038613fd0565b503d613fed565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa9081156126125760009161405c575b5015613f6f565b908382813d831161408a575b6140728183611458565b81010312610259575061408490611cb0565b38614055565b503d614068565b806140995750565b80471061416257600080808093335af13d1561415d573d6140b981611499565b906140c76040519283611458565b8152600060203d92013e5b156140d957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b6140d2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6000818152600360205267ffffffffffffffff908160408220541661423c577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600360205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600460205260408120908381528160205267ffffffffffffffff80604083205416614301577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b9061433590611c61565b60009283925b8051841015614390579361434f84866115c2565b519160005b835181101561437f5761436781856115c2565b5161437284876115c2565b5260019283019201614354565b50909460019094019390915061433b565b509250905090565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480614496575b15614400577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152614490816113e7565b51902090565b507f000000000000000000000000000000000000000000000000000000000000000046146143d7565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260018252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e085015261010090818501528352610120830196838810908811176113b8576145aa86956145be946145c6998b52519020614830565b918860ff8351169183015192015192614794565b9490946145fb565b51169116036145d25750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614765578061460c5750565b600181036146725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036146d85760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146146e157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116148245791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa1561481757815173ffffffffffffffffffffffffffffffffffffffff811615614811579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614838614398565b906040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526144908161139c565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600160205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff8711176113b85761492d85946145be936145c6988a52519020614830565b9060ff8151168860208301519201519261479456fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323700000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/ink-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/linea/.chainId",
    "content": "59144\n"
  },
  {
    "path": "deployments/linea/.migrations.json",
    "content": "{\n  \"000001-registry\": 1694032880,\n  \"000002-eas\": 1694032891,\n  \"000003-register-initial-schemas\": 1694033445,\n  \"000004-name-initial-schemas\": 1694033997,\n  \"000005-eip712-proxy\": 1694034008\n}"
  },
  {
    "path": "deployments/linea/EAS.json",
    "content": "{\n  \"address\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x56dbc6d821aeb4e32b4863a0b8719de3c22a1793dc839bab3dbce5401b468c17\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"transactionIndex\": 8,\n    \"gasUsed\": \"4137157\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x73b55b331aea624bfa3b2a5af531de00875232ab77d627b9aad8e2bbddff50c2\",\n    \"transactionHash\": \"0x56dbc6d821aeb4e32b4863a0b8719de3c22a1793dc839bab3dbce5401b468c17\",\n    \"logs\": [],\n    \"blockNumber\": 362820,\n    \"cumulativeGasUsed\": \"5351756\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 2, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUids = new bytes32[][](length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUids = new bytes32[][](length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidsCount Total UIDs count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidsCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidsCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUids = uidLists[i];\\\\n            uint256 currentUidsLength = currentUids.length;\\\\n            for (uint256 j = 0; j < currentUidsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUids[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfd2c344003511c081573a628dccdf8664f4a222ce0a9aa3adf5a0d8d28148ee4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xf83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0x2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7f334240224ebcf472ea0c8385df95515a7f253d4d3ebb65ddb9b58f3323ba7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e4a38038062004e4a83398101604081905262000035916200020d565b604080518082018252600381526245415360e81b602080830191909152825180840190935260058352640312e322e360dc1b908301526001608052600260a052600060c0819052909190829082906200009090839062000188565b61018052620000a181600162000188565b6101a052815160208084019190912061014052815190820120610160524661010052620001326101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e0525050306101205260026200014a8382620002e4565b5050506001600160a01b03811662000175576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000425565b6000602083511015620001a857620001a083620001c1565b9050620001bb565b81620001b58482620002e4565b5060ff90505b92915050565b600080829050601f81511115620001f8578260405163305a27a960e01b8152600401620001ef9190620003b0565b60405180910390fd5b8051620002058262000400565b179392505050565b6000602082840312156200022057600080fd5b81516001600160a01b03811681146200023857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026a57607f821691505b6020821081036200028b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002df57600081815260208120601f850160051c81016020861015620002ba5750805b601f850160051c820191505b81811015620002db57828155600101620002c6565b5050505b505050565b81516001600160401b038111156200030057620003006200023f565b620003188162000311845462000255565b8462000291565b602080601f831160018114620003505760008415620003375750858301515b600019600386901b1c1916600185901b178555620002db565b600085815260208120601f198616915b82811015620003815788860151825594840194600190910190840162000360565b5085821015620003a05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003df57858101830151858201604001528201620003c1565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028b5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614990620004ba60003960008181610538015281816115df0152611f0a01526000610d4f01526000610d25015260006129930152600061296b015260006128c6015260006128f00152600061291a01526000610c3401526000610c0b01526000610be201526149906000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137be565b610575565b005b3480156101bc57600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137be565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061386e565b34801561025957600080fd5b506101df6102683660046138ba565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138d7565b6107e3565b6102b66102b13660046137be565b6108e6565b6040516101e99190613912565b6101ae6102d1366004613956565b610a67565b6101ae6102e43660046137be565b610aeb565b3480156102f557600080fd5b5061021261030436600461396e565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461396e565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139c2565b6102b66103743660046137be565b610dbb565b34801561038557600080fd5b5061039961039436600461396e565b61102e565b6040516101e99190613b32565b6101ae6103b4366004613b45565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b58565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101df565b34801561045257600080fd5b5061021261046136600461396e565b611295565b34801561047257600080fd5b5061021261048136600461396e565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461396e565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137be565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b84565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bbf565b90506020028101906105cd9190613bee565b6105d690613e84565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bbf565b602002602001015181526020018660400151848151811061068257610682613bbf565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a88611596565b6106ee9088613fae565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bbf565b9050602002013585611be7565b600101610712565b50909150505b92915050565b60606002805461076090613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fc1565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614130565b611ce6565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141ab565b610884906141df565b8160008151811061089757610897613bbf565b60209081029190910101526108c08335826108b860c0870160a088016138ba565b346001611e64565b602001516000815181106108d6576108d6613bbf565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c2c565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bbf565b905060200281019061099191906141eb565b90506109a0602082018261421f565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef602085018561421f565b6109f891614287565b338887611e64565b8051909150610a0f9086613fae565b94508060200151878581518110610a2857610a28613bbf565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612597565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142fb565b81600081518110610acc57610acc613bbf565b6020908102919091010152610ae682358233346001611596565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bbf565b9050602002810190610b4291906141eb565b9050610baf8135610b566020840184614317565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142fb565b81526020019060010190610b76565b5050505050338886611596565b610bb99086613fae565b94505050610bc78160010190565b9050610af0565b60004261074b8382612681565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612743565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612743565b610c587f0000000000000000000000000000000000000000000000000000000000000000612743565b604051602001610c6a9392919061437f565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612801565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612801565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c2c565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bbf565b9050602002810190610e669190613bee565b9050366000610e78602084018461421f565b909250905080801580610e995750610e9360408501856143f5565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bbf565b9050602002810190610f1791906141ab565b610f20906141df565b8152602001610f3260408901896143f5565b85818110610f4257610f42613bbf565b905060600201803603810190610f58919061445c565b8152602001610f6d6080890160608a016138ba565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a01614478565b67ffffffffffffffff169052611ce6565b600101610ed3565b506000610fda8535610fc38587614287565b610fd36080890160608a016138ba565b8b8a611e64565b8051909150610fe99089613fae565b975080602001518a888151811061100257611002613bbf565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613fc1565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b61120761120236839003830183614493565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e579050509050611259368390038301602084016142fb565b8160008151811061126c5761126c613bbf565b6020908102919091010152610ae682358261128d60e0860160c087016138ba565b346001611596565b60004261074b338483611be7565b60004282825b81811015610745576112d38686838181106112c6576112c6613bbf565b9050602002013584612681565b6001016112a9565b60006112e56128ac565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141ab565b61137b906141df565b8160008151811061138e5761138e613bbf565b60209081029190910101526108c083358233346001611e64565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152600390975293862080549596939593946114e4947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c9493928761148983614501565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206129e4565b905061155a84606001518284602001518560400151866000015160405160200161154693929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a2c565b611590576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611626573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261166c9190810190614539565b80519091506116a7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116c4576116c4613c2c565b60405190808252806020026020018201604052801561176357816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116e25790505b50905060008267ffffffffffffffff81111561178157611781613c2c565b6040519080825280602002602001820160405280156117aa578160200160208202803683370190505b50905060005b83811015611bc95760008a82815181106117cc576117cc613bbf565b6020908102919091018101518051600090815260049092526040909120805491925090611825576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611862576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118b8576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661190e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611968576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a7490613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090613fc1565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505050505081525050858481518110611b0857611b08613bbf565b60200260200101819052508160200151848481518110611b2a57611b2a613bbf565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b6057611b60613bbf565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bb791815260200190565b60405180910390a450506001016117b0565b50611bd984838360018b8b612aa7565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c5b576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d1a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d51576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081526003909b52978a208054999a979997986114e4987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611de483614501565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016114c9565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611ea957611ea9613c2c565b604051908082528060200260200182016040528015611ed2578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fac9190810190614539565b8051909150611fe7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561200257612002613c2c565b6040519080825280602002602001820160405280156120a157816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120205790505b50905060008467ffffffffffffffff8111156120bf576120bf613c2c565b6040519080825280602002602001820160405280156120e8578160200160208202803683370190505b50905060005b858110156125765760008b828151811061210a5761210a613bbf565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561215557504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561218c576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561219f575080604001515b156121d6576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121fa4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61229c8382612e96565b600081815260046020526040902054909250156122bb57600101612292565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061243a908261465f565b505050606084015115612491576060840151600090815260046020526040902054612491576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124a4576124a4613bbf565b60200260200101819052508360a001518686815181106124c6576124c6613bbf565b60200260200101818152505081896020015186815181106124e9576124e9613bbf565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161255991815260200190565b60405180910390a45050505061256f8160010190565b90506120ee565b5061258683838360008c8c612aa7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125b4576125b4613c2c565b6040519080825280602002602001820160405280156125dd578160200160208202803683370190505b508451909150600090815b8181101561267657600087828151811061260457612604613bbf565b6020026020010151905060008151905060005b818110156126625782818151811061263157612631613bbf565b602002602001015187878151811061264b5761264b613bbf565b602090810291909101015260019586019501612617565b50505061266f8160010190565b90506125e8565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126d1576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061275083612ef5565b600101905060008167ffffffffffffffff81111561277057612770613c2c565b6040519080825280601f01601f19166020018201604052801561279a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127a457509392505050565b606060ff831461281b5761281483612fd7565b905061074b565b81805461282790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461285390613fc1565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561291257507f000000000000000000000000000000000000000000000000000000000000000046145b1561293c57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b6129f16128ac565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a3b8585613016565b90925090506000816004811115612a5457612a54614779565b148015612a8c57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a9d5750612a9d86868661305b565b9695505050505050565b84516000906001819003612aff57612af78888600081518110612acc57612acc613bbf565b602002602001015188600081518110612ae757612ae7613bbf565b60200260200101518888886131b8565b915050612a9d565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612ba05760005b82811015612b8557878181518110612b3c57612b3c613bbf565b6020026020010151600014612b7d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b22565b508315612b9557612b95856134d7565b600092505050612a9d565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1291906147a8565b905060005b84811015612ccf5760008a8281518110612c3357612c33613bbf565b6020026020010151905080600003612c4b5750612cc7565b82612c82576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612cbc576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c17565b508715612daa576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d2c908e908e906004016147c5565b60206040518083038185885af1158015612d4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6f91906147a8565b612da5576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e79565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e00908e908e906004016147c5565b60206040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4391906147a8565b612e79576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e8857612e88876134d7565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612ed799989796918c9101614859565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f3e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f6a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f8857662386f26fc10000830492506010015b6305f5e1008310612fa0576305f5e100830492506008015b6127108310612fb457612710830492506004015b60648310612fc6576064830492506002015b600a831061074b5760010192915050565b60606000612fe4836134ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361304c5760208301516040840151606085015160001a6130408782858561352b565b94509450505050613054565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8686604051602401613092929190614937565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161311b9190614958565b600060405180830381855afa9150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b509150915081801561316f57506020815110155b8015612a9d575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131ad908301602090810190840161496a565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322c578515613213576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322257613222846134d7565b6000915050612a9d565b8515613317578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a191906147a8565b6132d7576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613311576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133ef576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613371908b90600401613b32565b60206040518083038185885af115801561338f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b491906147a8565b6133ea576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bc565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613443908b90600401613b32565b60206040518083038185885af1158015613461573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348691906147a8565b6134bc576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134cb576134cb846134d7565b50939695505050505050565b80156134e7576134e7338261361a565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135625750600090506003613611565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135b6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661360a57600060019250925050613611565b9150600090505b94509492505050565b80471015613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136e3576040519150601f19603f3d011682016040523d82523d6000602084013e6136e8565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613680565b60008083601f84011261378b57600080fd5b50813567ffffffffffffffff8111156137a357600080fd5b6020830191508360208260051b850101111561305457600080fd5b600080602083850312156137d157600080fd5b823567ffffffffffffffff8111156137e857600080fd5b6137f485828601613779565b90969095509350505050565b60005b8381101561381b578181015183820152602001613803565b50506000910152565b6000815180845261383c816020860160208601613800565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138816020830184613824565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134e757600080fd5b80356138b581613888565b919050565b6000602082840312156138cc57600080fd5b813561388181613888565b6000602082840312156138e957600080fd5b813567ffffffffffffffff81111561390057600080fd5b820160e0818503121561388157600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561394a5783518352928401929184019160010161392e565b50909695505050505050565b60006060828403121561396857600080fd5b50919050565b60006020828403121561398057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139b75781518752958201959082019060010161399b565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139fd60e0830189613824565b8281036040840152613a0f8189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bd98185613987565b600061014082518452602083015160208501526040830151613a79604086018267ffffffffffffffff169052565b506060830151613a95606086018267ffffffffffffffff169052565b506080830151613ab1608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613ae360c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b0b60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612a9d83870182613824565b6020815260006138816020830184613a4b565b6000610100828403121561396857600080fd5b60008060408385031215613b6b57600080fd5b8235613b7681613888565b946020939093013593505050565b600060208284031215613b9657600080fd5b813567ffffffffffffffff811115613bad57600080fd5b82016040818503121561388157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c2257600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b6040516080810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d1157613d11613c2c565b604052919050565b600067ffffffffffffffff821115613d3357613d33613c2c565b5060051b60200190565b600060408284031215613d4f57600080fd5b6040516040810181811067ffffffffffffffff82111715613d7257613d72613c2c565b604052823581526020928301359281019290925250919050565b600060608284031215613d9e57600080fd5b6040516060810181811067ffffffffffffffff82111715613dc157613dc1613c2c565b604052905080823560ff81168114613dd857600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e0857600080fd5b81356020613e1d613e1883613d19565b613cca565b82815260609283028501820192828201919087851115613e3c57600080fd5b8387015b85811015613e5f57613e528982613d8c565b8452928401928101613e40565b5090979650505050505050565b803567ffffffffffffffff811681146138b557600080fd5b600060a08236031215613e9657600080fd5b613e9e613c5b565b8235815260208084013567ffffffffffffffff80821115613ebe57600080fd5b9085019036601f830112613ed157600080fd5b8135613edf613e1882613d19565b81815260069190911b83018401908481019036831115613efe57600080fd5b938501935b82851015613f2757613f153686613d3d565b82528582019150604085019450613f03565b80868801525050506040860135925080831115613f4357600080fd5b5050613f5136828601613df7565b604083015250613f63606084016138aa565b6060820152613f7460808401613e6c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f7f565b600181811c90821680613fd557607f821691505b602082108103613968577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80151581146134e757600080fd5b600067ffffffffffffffff82111561403657614036613c2c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561407457600080fd5b61407c613c84565b9050813561408981613888565b81526020614098838201613e6c565b8183015260408301356140aa8161400e565b604083015260608381013590830152608083013567ffffffffffffffff8111156140d357600080fd5b8301601f810185136140e457600080fd5b80356140f2613e188261401c565b818152868483850101111561410657600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561414257600080fd5b61414a613c5b565b82358152602083013567ffffffffffffffff81111561416857600080fd5b61417436828601614062565b6020830152506141873660408501613d8c565b604082015260a083013561419a81613888565b6060820152613f7460c08401613e6c565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c2257600080fd5b600061074b3683614062565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425457600080fd5b83018035915067ffffffffffffffff82111561426f57600080fd5b6020019150600581901b360382131561305457600080fd5b6000614295613e1884613d19565b80848252602080830192508560051b8501368111156142b357600080fd5b855b818110156142ef57803567ffffffffffffffff8111156142d55760008081fd5b6142e136828a01614062565b8652509382019382016142b5565b50919695505050505050565b60006040828403121561430d57600080fd5b6138818383613d3d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434c57600080fd5b83018035915067ffffffffffffffff82111561436757600080fd5b6020019150600681901b360382131561305457600080fd5b60008451614391818460208901613800565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143cd816001850160208a01613800565b600192019182015283516143e8816002840160208801613800565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261442a57600080fd5b83018035915067ffffffffffffffff82111561444557600080fd5b602001915060608102360382131561305457600080fd5b60006060828403121561446e57600080fd5b6138818383613d8c565b60006020828403121561448a57600080fd5b61388182613e6c565b600061010082840312156144a657600080fd5b6144ae613c5b565b823581526144bf8460208501613d3d565b60208201526144d18460608501613d8c565b604082015260c08301356144e481613888565b60608201526144f560e08401613e6c565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453257614532613f7f565b5060010190565b6000602080838503121561454c57600080fd5b825167ffffffffffffffff8082111561456457600080fd5b908401906080828703121561457857600080fd5b614580613ca7565b825181528383015161459181613888565b8185015260408301516145a38161400e565b60408201526060830151828111156145ba57600080fd5b80840193505086601f8401126145cf57600080fd5b825191506145df613e188361401c565b82815287858486010111156145f357600080fd5b61460283868301878701613800565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146385750805b601f850160051c820191505b8181101561465757828155600101614644565b505050505050565b815167ffffffffffffffff81111561467957614679613c2c565b61468d816146878454613fc1565b84614611565b602080601f8311600181146146e057600084156146aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614657565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561472d5788860151825594840194600190910190840161470e565b508582101561476957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147ba57600080fd5b81516138818161400e565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561483a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614828868351613a4b565b955093820193908201906001016147ee565b5050858403818701525050506148508185613987565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516148f2816079850160208801613800565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149506040830184613824565b949350505050565b60008251613c22818460208701613800565b60006020828403121561497c57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137be565b610575565b005b3480156101bc57600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137be565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061386e565b34801561025957600080fd5b506101df6102683660046138ba565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138d7565b6107e3565b6102b66102b13660046137be565b6108e6565b6040516101e99190613912565b6101ae6102d1366004613956565b610a67565b6101ae6102e43660046137be565b610aeb565b3480156102f557600080fd5b5061021261030436600461396e565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461396e565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139c2565b6102b66103743660046137be565b610dbb565b34801561038557600080fd5b5061039961039436600461396e565b61102e565b6040516101e99190613b32565b6101ae6103b4366004613b45565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b58565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101df565b34801561045257600080fd5b5061021261046136600461396e565b611295565b34801561047257600080fd5b5061021261048136600461396e565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461396e565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137be565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b84565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bbf565b90506020028101906105cd9190613bee565b6105d690613e84565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bbf565b602002602001015181526020018660400151848151811061068257610682613bbf565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a88611596565b6106ee9088613fae565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bbf565b9050602002013585611be7565b600101610712565b50909150505b92915050565b60606002805461076090613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fc1565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614130565b611ce6565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141ab565b610884906141df565b8160008151811061089757610897613bbf565b60209081029190910101526108c08335826108b860c0870160a088016138ba565b346001611e64565b602001516000815181106108d6576108d6613bbf565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c2c565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bbf565b905060200281019061099191906141eb565b90506109a0602082018261421f565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef602085018561421f565b6109f891614287565b338887611e64565b8051909150610a0f9086613fae565b94508060200151878581518110610a2857610a28613bbf565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612597565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142fb565b81600081518110610acc57610acc613bbf565b6020908102919091010152610ae682358233346001611596565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bbf565b9050602002810190610b4291906141eb565b9050610baf8135610b566020840184614317565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142fb565b81526020019060010190610b76565b5050505050338886611596565b610bb99086613fae565b94505050610bc78160010190565b9050610af0565b60004261074b8382612681565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612743565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612743565b610c587f0000000000000000000000000000000000000000000000000000000000000000612743565b604051602001610c6a9392919061437f565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612801565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612801565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c2c565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bbf565b9050602002810190610e669190613bee565b9050366000610e78602084018461421f565b909250905080801580610e995750610e9360408501856143f5565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bbf565b9050602002810190610f1791906141ab565b610f20906141df565b8152602001610f3260408901896143f5565b85818110610f4257610f42613bbf565b905060600201803603810190610f58919061445c565b8152602001610f6d6080890160608a016138ba565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a01614478565b67ffffffffffffffff169052611ce6565b600101610ed3565b506000610fda8535610fc38587614287565b610fd36080890160608a016138ba565b8b8a611e64565b8051909150610fe99089613fae565b975080602001518a888151811061100257611002613bbf565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613fc1565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b61120761120236839003830183614493565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e579050509050611259368390038301602084016142fb565b8160008151811061126c5761126c613bbf565b6020908102919091010152610ae682358261128d60e0860160c087016138ba565b346001611596565b60004261074b338483611be7565b60004282825b81811015610745576112d38686838181106112c6576112c6613bbf565b9050602002013584612681565b6001016112a9565b60006112e56128ac565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141ab565b61137b906141df565b8160008151811061138e5761138e613bbf565b60209081029190910101526108c083358233346001611e64565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152600390975293862080549596939593946114e4947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c9493928761148983614501565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206129e4565b905061155a84606001518284602001518560400151866000015160405160200161154693929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a2c565b611590576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611626573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261166c9190810190614539565b80519091506116a7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116c4576116c4613c2c565b60405190808252806020026020018201604052801561176357816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116e25790505b50905060008267ffffffffffffffff81111561178157611781613c2c565b6040519080825280602002602001820160405280156117aa578160200160208202803683370190505b50905060005b83811015611bc95760008a82815181106117cc576117cc613bbf565b6020908102919091018101518051600090815260049092526040909120805491925090611825576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611862576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118b8576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661190e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611968576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a7490613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090613fc1565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505050505081525050858481518110611b0857611b08613bbf565b60200260200101819052508160200151848481518110611b2a57611b2a613bbf565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b6057611b60613bbf565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bb791815260200190565b60405180910390a450506001016117b0565b50611bd984838360018b8b612aa7565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c5b576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d1a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d51576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081526003909b52978a208054999a979997986114e4987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611de483614501565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016114c9565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611ea957611ea9613c2c565b604051908082528060200260200182016040528015611ed2578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fac9190810190614539565b8051909150611fe7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561200257612002613c2c565b6040519080825280602002602001820160405280156120a157816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120205790505b50905060008467ffffffffffffffff8111156120bf576120bf613c2c565b6040519080825280602002602001820160405280156120e8578160200160208202803683370190505b50905060005b858110156125765760008b828151811061210a5761210a613bbf565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561215557504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561218c576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561219f575080604001515b156121d6576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121fa4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61229c8382612e96565b600081815260046020526040902054909250156122bb57600101612292565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061243a908261465f565b505050606084015115612491576060840151600090815260046020526040902054612491576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124a4576124a4613bbf565b60200260200101819052508360a001518686815181106124c6576124c6613bbf565b60200260200101818152505081896020015186815181106124e9576124e9613bbf565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161255991815260200190565b60405180910390a45050505061256f8160010190565b90506120ee565b5061258683838360008c8c612aa7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125b4576125b4613c2c565b6040519080825280602002602001820160405280156125dd578160200160208202803683370190505b508451909150600090815b8181101561267657600087828151811061260457612604613bbf565b6020026020010151905060008151905060005b818110156126625782818151811061263157612631613bbf565b602002602001015187878151811061264b5761264b613bbf565b602090810291909101015260019586019501612617565b50505061266f8160010190565b90506125e8565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126d1576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061275083612ef5565b600101905060008167ffffffffffffffff81111561277057612770613c2c565b6040519080825280601f01601f19166020018201604052801561279a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127a457509392505050565b606060ff831461281b5761281483612fd7565b905061074b565b81805461282790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461285390613fc1565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561291257507f000000000000000000000000000000000000000000000000000000000000000046145b1561293c57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b6129f16128ac565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a3b8585613016565b90925090506000816004811115612a5457612a54614779565b148015612a8c57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a9d5750612a9d86868661305b565b9695505050505050565b84516000906001819003612aff57612af78888600081518110612acc57612acc613bbf565b602002602001015188600081518110612ae757612ae7613bbf565b60200260200101518888886131b8565b915050612a9d565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612ba05760005b82811015612b8557878181518110612b3c57612b3c613bbf565b6020026020010151600014612b7d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b22565b508315612b9557612b95856134d7565b600092505050612a9d565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1291906147a8565b905060005b84811015612ccf5760008a8281518110612c3357612c33613bbf565b6020026020010151905080600003612c4b5750612cc7565b82612c82576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612cbc576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c17565b508715612daa576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d2c908e908e906004016147c5565b60206040518083038185885af1158015612d4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6f91906147a8565b612da5576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e79565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e00908e908e906004016147c5565b60206040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4391906147a8565b612e79576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e8857612e88876134d7565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612ed799989796918c9101614859565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f3e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f6a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f8857662386f26fc10000830492506010015b6305f5e1008310612fa0576305f5e100830492506008015b6127108310612fb457612710830492506004015b60648310612fc6576064830492506002015b600a831061074b5760010192915050565b60606000612fe4836134ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361304c5760208301516040840151606085015160001a6130408782858561352b565b94509450505050613054565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8686604051602401613092929190614937565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161311b9190614958565b600060405180830381855afa9150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b509150915081801561316f57506020815110155b8015612a9d575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131ad908301602090810190840161496a565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322c578515613213576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322257613222846134d7565b6000915050612a9d565b8515613317578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a191906147a8565b6132d7576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613311576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133ef576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613371908b90600401613b32565b60206040518083038185885af115801561338f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b491906147a8565b6133ea576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bc565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613443908b90600401613b32565b60206040518083038185885af1158015613461573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348691906147a8565b6134bc576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134cb576134cb846134d7565b50939695505050505050565b80156134e7576134e7338261361a565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135625750600090506003613611565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135b6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661360a57600060019250925050613611565b9150600090505b94509492505050565b80471015613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136e3576040519150601f19603f3d011682016040523d82523d6000602084013e6136e8565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613680565b60008083601f84011261378b57600080fd5b50813567ffffffffffffffff8111156137a357600080fd5b6020830191508360208260051b850101111561305457600080fd5b600080602083850312156137d157600080fd5b823567ffffffffffffffff8111156137e857600080fd5b6137f485828601613779565b90969095509350505050565b60005b8381101561381b578181015183820152602001613803565b50506000910152565b6000815180845261383c816020860160208601613800565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138816020830184613824565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134e757600080fd5b80356138b581613888565b919050565b6000602082840312156138cc57600080fd5b813561388181613888565b6000602082840312156138e957600080fd5b813567ffffffffffffffff81111561390057600080fd5b820160e0818503121561388157600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561394a5783518352928401929184019160010161392e565b50909695505050505050565b60006060828403121561396857600080fd5b50919050565b60006020828403121561398057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139b75781518752958201959082019060010161399b565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139fd60e0830189613824565b8281036040840152613a0f8189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bd98185613987565b600061014082518452602083015160208501526040830151613a79604086018267ffffffffffffffff169052565b506060830151613a95606086018267ffffffffffffffff169052565b506080830151613ab1608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613ae360c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b0b60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612a9d83870182613824565b6020815260006138816020830184613a4b565b6000610100828403121561396857600080fd5b60008060408385031215613b6b57600080fd5b8235613b7681613888565b946020939093013593505050565b600060208284031215613b9657600080fd5b813567ffffffffffffffff811115613bad57600080fd5b82016040818503121561388157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c2257600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b6040516080810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d1157613d11613c2c565b604052919050565b600067ffffffffffffffff821115613d3357613d33613c2c565b5060051b60200190565b600060408284031215613d4f57600080fd5b6040516040810181811067ffffffffffffffff82111715613d7257613d72613c2c565b604052823581526020928301359281019290925250919050565b600060608284031215613d9e57600080fd5b6040516060810181811067ffffffffffffffff82111715613dc157613dc1613c2c565b604052905080823560ff81168114613dd857600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e0857600080fd5b81356020613e1d613e1883613d19565b613cca565b82815260609283028501820192828201919087851115613e3c57600080fd5b8387015b85811015613e5f57613e528982613d8c565b8452928401928101613e40565b5090979650505050505050565b803567ffffffffffffffff811681146138b557600080fd5b600060a08236031215613e9657600080fd5b613e9e613c5b565b8235815260208084013567ffffffffffffffff80821115613ebe57600080fd5b9085019036601f830112613ed157600080fd5b8135613edf613e1882613d19565b81815260069190911b83018401908481019036831115613efe57600080fd5b938501935b82851015613f2757613f153686613d3d565b82528582019150604085019450613f03565b80868801525050506040860135925080831115613f4357600080fd5b5050613f5136828601613df7565b604083015250613f63606084016138aa565b6060820152613f7460808401613e6c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f7f565b600181811c90821680613fd557607f821691505b602082108103613968577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80151581146134e757600080fd5b600067ffffffffffffffff82111561403657614036613c2c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561407457600080fd5b61407c613c84565b9050813561408981613888565b81526020614098838201613e6c565b8183015260408301356140aa8161400e565b604083015260608381013590830152608083013567ffffffffffffffff8111156140d357600080fd5b8301601f810185136140e457600080fd5b80356140f2613e188261401c565b818152868483850101111561410657600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561414257600080fd5b61414a613c5b565b82358152602083013567ffffffffffffffff81111561416857600080fd5b61417436828601614062565b6020830152506141873660408501613d8c565b604082015260a083013561419a81613888565b6060820152613f7460c08401613e6c565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c2257600080fd5b600061074b3683614062565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425457600080fd5b83018035915067ffffffffffffffff82111561426f57600080fd5b6020019150600581901b360382131561305457600080fd5b6000614295613e1884613d19565b80848252602080830192508560051b8501368111156142b357600080fd5b855b818110156142ef57803567ffffffffffffffff8111156142d55760008081fd5b6142e136828a01614062565b8652509382019382016142b5565b50919695505050505050565b60006040828403121561430d57600080fd5b6138818383613d3d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434c57600080fd5b83018035915067ffffffffffffffff82111561436757600080fd5b6020019150600681901b360382131561305457600080fd5b60008451614391818460208901613800565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143cd816001850160208a01613800565b600192019182015283516143e8816002840160208801613800565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261442a57600080fd5b83018035915067ffffffffffffffff82111561444557600080fd5b602001915060608102360382131561305457600080fd5b60006060828403121561446e57600080fd5b6138818383613d8c565b60006020828403121561448a57600080fd5b61388182613e6c565b600061010082840312156144a657600080fd5b6144ae613c5b565b823581526144bf8460208501613d3d565b60208201526144d18460608501613d8c565b604082015260c08301356144e481613888565b60608201526144f560e08401613e6c565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453257614532613f7f565b5060010190565b6000602080838503121561454c57600080fd5b825167ffffffffffffffff8082111561456457600080fd5b908401906080828703121561457857600080fd5b614580613ca7565b825181528383015161459181613888565b8185015260408301516145a38161400e565b60408201526060830151828111156145ba57600080fd5b80840193505086601f8401126145cf57600080fd5b825191506145df613e188361401c565b82815287858486010111156145f357600080fd5b61460283868301878701613800565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146385750805b601f850160051c820191505b8181101561465757828155600101614644565b505050505050565b815167ffffffffffffffff81111561467957614679613c2c565b61468d816146878454613fc1565b84614611565b602080601f8311600181146146e057600084156146aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614657565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561472d5788860151825594840194600190910190840161470e565b508582101561476957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147ba57600080fd5b81516138818161400e565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561483a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614828868351613a4b565b955093820193908201906001016147ee565b5050858403818701525050506148508185613987565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516148f2816079850160208801613800565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149506040830184613824565b949350505050565b60008251613c22818460208701613800565b60006020828403121561497c57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6388,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6392,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3954,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\"\n      },\n      {\n        \"astId\": 3958,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3964,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3848_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3848_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3829,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3831,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3833,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3835,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3837,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3839,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3841,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3843,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3845,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3847,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/linea/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x932639efbae14dbdfbab3c2c0756c3233a1df1289de1054d7dd8a922e0afded7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"2300386\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x8909dcbe01faa410614c4eab565de0f67087f4f44ec89282fbf66849b2de211f\",\n    \"transactionHash\": \"0x932639efbae14dbdfbab3c2c0756c3233a1df1289de1054d7dd8a922e0afded7\",\n    \"logs\": [],\n    \"blockNumber\": 362913,\n    \"cumulativeGasUsed\": \"2499242\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6788,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6792,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 6796,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/linea/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x22710e3a75a0087d0cfd60a3a8fe0714bb33a1c788e194e32303fedc13807f7a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"631544\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x7213a2f9abd789fcac4188a925b72e9330357723522906c7710161b07b6dd7d8\",\n    \"transactionHash\": \"0x22710e3a75a0087d0cfd60a3a8fe0714bb33a1c788e194e32303fedc13807f7a\",\n    \"logs\": [],\n    \"blockNumber\": 362819,\n    \"cumulativeGasUsed\": \"1203752\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 2, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcb0f2a8edb56bc5bba9d81d7501f3911c257e8dcf905ea7428e37a45c441d901\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600260a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6182,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)6125_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)7768\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)6125_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)6125_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)6125_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 6117,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 6120,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)7768\"\n          },\n          {\n            \"astId\": 6122,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 6124,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/linea/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/linea/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/linea/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/linea/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e4a38038062004e4a83398101604081905262000035916200020d565b604080518082018252600381526245415360e81b602080830191909152825180840190935260058352640312e322e360dc1b908301526001608052600260a052600060c0819052909190829082906200009090839062000188565b61018052620000a181600162000188565b6101a052815160208084019190912061014052815190820120610160524661010052620001326101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e0525050306101205260026200014a8382620002e4565b5050506001600160a01b03811662000175576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000425565b6000602083511015620001a857620001a083620001c1565b9050620001bb565b81620001b58482620002e4565b5060ff90505b92915050565b600080829050601f81511115620001f8578260405163305a27a960e01b8152600401620001ef9190620003b0565b60405180910390fd5b8051620002058262000400565b179392505050565b6000602082840312156200022057600080fd5b81516001600160a01b03811681146200023857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026a57607f821691505b6020821081036200028b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002df57600081815260208120601f850160051c81016020861015620002ba5750805b601f850160051c820191505b81811015620002db57828155600101620002c6565b5050505b505050565b81516001600160401b038111156200030057620003006200023f565b620003188162000311845462000255565b8462000291565b602080601f831160018114620003505760008415620003375750858301515b600019600386901b1c1916600185901b178555620002db565b600085815260208120601f198616915b82811015620003815788860151825594840194600190910190840162000360565b5085821015620003a05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003df57858101830151858201604001528201620003c1565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028b5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614990620004ba60003960008181610538015281816115df0152611f0a01526000610d4f01526000610d25015260006129930152600061296b015260006128c6015260006128f00152600061291a01526000610c3401526000610c0b01526000610be201526149906000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137be565b610575565b005b3480156101bc57600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137be565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061386e565b34801561025957600080fd5b506101df6102683660046138ba565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138d7565b6107e3565b6102b66102b13660046137be565b6108e6565b6040516101e99190613912565b6101ae6102d1366004613956565b610a67565b6101ae6102e43660046137be565b610aeb565b3480156102f557600080fd5b5061021261030436600461396e565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461396e565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139c2565b6102b66103743660046137be565b610dbb565b34801561038557600080fd5b5061039961039436600461396e565b61102e565b6040516101e99190613b32565b6101ae6103b4366004613b45565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b58565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101df565b34801561045257600080fd5b5061021261046136600461396e565b611295565b34801561047257600080fd5b5061021261048136600461396e565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461396e565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137be565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b84565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bbf565b90506020028101906105cd9190613bee565b6105d690613e84565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bbf565b602002602001015181526020018660400151848151811061068257610682613bbf565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a88611596565b6106ee9088613fae565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bbf565b9050602002013585611be7565b600101610712565b50909150505b92915050565b60606002805461076090613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fc1565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614130565b611ce6565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141ab565b610884906141df565b8160008151811061089757610897613bbf565b60209081029190910101526108c08335826108b860c0870160a088016138ba565b346001611e64565b602001516000815181106108d6576108d6613bbf565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c2c565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bbf565b905060200281019061099191906141eb565b90506109a0602082018261421f565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef602085018561421f565b6109f891614287565b338887611e64565b8051909150610a0f9086613fae565b94508060200151878581518110610a2857610a28613bbf565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612597565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142fb565b81600081518110610acc57610acc613bbf565b6020908102919091010152610ae682358233346001611596565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bbf565b9050602002810190610b4291906141eb565b9050610baf8135610b566020840184614317565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142fb565b81526020019060010190610b76565b5050505050338886611596565b610bb99086613fae565b94505050610bc78160010190565b9050610af0565b60004261074b8382612681565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612743565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612743565b610c587f0000000000000000000000000000000000000000000000000000000000000000612743565b604051602001610c6a9392919061437f565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612801565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612801565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c2c565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bbf565b9050602002810190610e669190613bee565b9050366000610e78602084018461421f565b909250905080801580610e995750610e9360408501856143f5565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bbf565b9050602002810190610f1791906141ab565b610f20906141df565b8152602001610f3260408901896143f5565b85818110610f4257610f42613bbf565b905060600201803603810190610f58919061445c565b8152602001610f6d6080890160608a016138ba565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a01614478565b67ffffffffffffffff169052611ce6565b600101610ed3565b506000610fda8535610fc38587614287565b610fd36080890160608a016138ba565b8b8a611e64565b8051909150610fe99089613fae565b975080602001518a888151811061100257611002613bbf565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613fc1565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b61120761120236839003830183614493565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e579050509050611259368390038301602084016142fb565b8160008151811061126c5761126c613bbf565b6020908102919091010152610ae682358261128d60e0860160c087016138ba565b346001611596565b60004261074b338483611be7565b60004282825b81811015610745576112d38686838181106112c6576112c6613bbf565b9050602002013584612681565b6001016112a9565b60006112e56128ac565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141ab565b61137b906141df565b8160008151811061138e5761138e613bbf565b60209081029190910101526108c083358233346001611e64565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152600390975293862080549596939593946114e4947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c9493928761148983614501565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206129e4565b905061155a84606001518284602001518560400151866000015160405160200161154693929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a2c565b611590576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611626573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261166c9190810190614539565b80519091506116a7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116c4576116c4613c2c565b60405190808252806020026020018201604052801561176357816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116e25790505b50905060008267ffffffffffffffff81111561178157611781613c2c565b6040519080825280602002602001820160405280156117aa578160200160208202803683370190505b50905060005b83811015611bc95760008a82815181106117cc576117cc613bbf565b6020908102919091018101518051600090815260049092526040909120805491925090611825576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611862576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118b8576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661190e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611968576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a7490613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090613fc1565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505050505081525050858481518110611b0857611b08613bbf565b60200260200101819052508160200151848481518110611b2a57611b2a613bbf565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b6057611b60613bbf565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bb791815260200190565b60405180910390a450506001016117b0565b50611bd984838360018b8b612aa7565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c5b576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d1a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d51576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081526003909b52978a208054999a979997986114e4987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611de483614501565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016114c9565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611ea957611ea9613c2c565b604051908082528060200260200182016040528015611ed2578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fac9190810190614539565b8051909150611fe7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561200257612002613c2c565b6040519080825280602002602001820160405280156120a157816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120205790505b50905060008467ffffffffffffffff8111156120bf576120bf613c2c565b6040519080825280602002602001820160405280156120e8578160200160208202803683370190505b50905060005b858110156125765760008b828151811061210a5761210a613bbf565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561215557504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561218c576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561219f575080604001515b156121d6576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121fa4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61229c8382612e96565b600081815260046020526040902054909250156122bb57600101612292565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061243a908261465f565b505050606084015115612491576060840151600090815260046020526040902054612491576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124a4576124a4613bbf565b60200260200101819052508360a001518686815181106124c6576124c6613bbf565b60200260200101818152505081896020015186815181106124e9576124e9613bbf565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161255991815260200190565b60405180910390a45050505061256f8160010190565b90506120ee565b5061258683838360008c8c612aa7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125b4576125b4613c2c565b6040519080825280602002602001820160405280156125dd578160200160208202803683370190505b508451909150600090815b8181101561267657600087828151811061260457612604613bbf565b6020026020010151905060008151905060005b818110156126625782818151811061263157612631613bbf565b602002602001015187878151811061264b5761264b613bbf565b602090810291909101015260019586019501612617565b50505061266f8160010190565b90506125e8565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126d1576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061275083612ef5565b600101905060008167ffffffffffffffff81111561277057612770613c2c565b6040519080825280601f01601f19166020018201604052801561279a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127a457509392505050565b606060ff831461281b5761281483612fd7565b905061074b565b81805461282790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461285390613fc1565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561291257507f000000000000000000000000000000000000000000000000000000000000000046145b1561293c57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b6129f16128ac565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a3b8585613016565b90925090506000816004811115612a5457612a54614779565b148015612a8c57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a9d5750612a9d86868661305b565b9695505050505050565b84516000906001819003612aff57612af78888600081518110612acc57612acc613bbf565b602002602001015188600081518110612ae757612ae7613bbf565b60200260200101518888886131b8565b915050612a9d565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612ba05760005b82811015612b8557878181518110612b3c57612b3c613bbf565b6020026020010151600014612b7d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b22565b508315612b9557612b95856134d7565b600092505050612a9d565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1291906147a8565b905060005b84811015612ccf5760008a8281518110612c3357612c33613bbf565b6020026020010151905080600003612c4b5750612cc7565b82612c82576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612cbc576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c17565b508715612daa576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d2c908e908e906004016147c5565b60206040518083038185885af1158015612d4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6f91906147a8565b612da5576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e79565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e00908e908e906004016147c5565b60206040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4391906147a8565b612e79576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e8857612e88876134d7565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612ed799989796918c9101614859565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f3e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f6a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f8857662386f26fc10000830492506010015b6305f5e1008310612fa0576305f5e100830492506008015b6127108310612fb457612710830492506004015b60648310612fc6576064830492506002015b600a831061074b5760010192915050565b60606000612fe4836134ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361304c5760208301516040840151606085015160001a6130408782858561352b565b94509450505050613054565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8686604051602401613092929190614937565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161311b9190614958565b600060405180830381855afa9150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b509150915081801561316f57506020815110155b8015612a9d575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131ad908301602090810190840161496a565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322c578515613213576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322257613222846134d7565b6000915050612a9d565b8515613317578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a191906147a8565b6132d7576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613311576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133ef576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613371908b90600401613b32565b60206040518083038185885af115801561338f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b491906147a8565b6133ea576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bc565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613443908b90600401613b32565b60206040518083038185885af1158015613461573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348691906147a8565b6134bc576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134cb576134cb846134d7565b50939695505050505050565b80156134e7576134e7338261361a565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135625750600090506003613611565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135b6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661360a57600060019250925050613611565b9150600090505b94509492505050565b80471015613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136e3576040519150601f19603f3d011682016040523d82523d6000602084013e6136e8565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613680565b60008083601f84011261378b57600080fd5b50813567ffffffffffffffff8111156137a357600080fd5b6020830191508360208260051b850101111561305457600080fd5b600080602083850312156137d157600080fd5b823567ffffffffffffffff8111156137e857600080fd5b6137f485828601613779565b90969095509350505050565b60005b8381101561381b578181015183820152602001613803565b50506000910152565b6000815180845261383c816020860160208601613800565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138816020830184613824565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134e757600080fd5b80356138b581613888565b919050565b6000602082840312156138cc57600080fd5b813561388181613888565b6000602082840312156138e957600080fd5b813567ffffffffffffffff81111561390057600080fd5b820160e0818503121561388157600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561394a5783518352928401929184019160010161392e565b50909695505050505050565b60006060828403121561396857600080fd5b50919050565b60006020828403121561398057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139b75781518752958201959082019060010161399b565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139fd60e0830189613824565b8281036040840152613a0f8189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bd98185613987565b600061014082518452602083015160208501526040830151613a79604086018267ffffffffffffffff169052565b506060830151613a95606086018267ffffffffffffffff169052565b506080830151613ab1608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613ae360c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b0b60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612a9d83870182613824565b6020815260006138816020830184613a4b565b6000610100828403121561396857600080fd5b60008060408385031215613b6b57600080fd5b8235613b7681613888565b946020939093013593505050565b600060208284031215613b9657600080fd5b813567ffffffffffffffff811115613bad57600080fd5b82016040818503121561388157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c2257600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b6040516080810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d1157613d11613c2c565b604052919050565b600067ffffffffffffffff821115613d3357613d33613c2c565b5060051b60200190565b600060408284031215613d4f57600080fd5b6040516040810181811067ffffffffffffffff82111715613d7257613d72613c2c565b604052823581526020928301359281019290925250919050565b600060608284031215613d9e57600080fd5b6040516060810181811067ffffffffffffffff82111715613dc157613dc1613c2c565b604052905080823560ff81168114613dd857600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e0857600080fd5b81356020613e1d613e1883613d19565b613cca565b82815260609283028501820192828201919087851115613e3c57600080fd5b8387015b85811015613e5f57613e528982613d8c565b8452928401928101613e40565b5090979650505050505050565b803567ffffffffffffffff811681146138b557600080fd5b600060a08236031215613e9657600080fd5b613e9e613c5b565b8235815260208084013567ffffffffffffffff80821115613ebe57600080fd5b9085019036601f830112613ed157600080fd5b8135613edf613e1882613d19565b81815260069190911b83018401908481019036831115613efe57600080fd5b938501935b82851015613f2757613f153686613d3d565b82528582019150604085019450613f03565b80868801525050506040860135925080831115613f4357600080fd5b5050613f5136828601613df7565b604083015250613f63606084016138aa565b6060820152613f7460808401613e6c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f7f565b600181811c90821680613fd557607f821691505b602082108103613968577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80151581146134e757600080fd5b600067ffffffffffffffff82111561403657614036613c2c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561407457600080fd5b61407c613c84565b9050813561408981613888565b81526020614098838201613e6c565b8183015260408301356140aa8161400e565b604083015260608381013590830152608083013567ffffffffffffffff8111156140d357600080fd5b8301601f810185136140e457600080fd5b80356140f2613e188261401c565b818152868483850101111561410657600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561414257600080fd5b61414a613c5b565b82358152602083013567ffffffffffffffff81111561416857600080fd5b61417436828601614062565b6020830152506141873660408501613d8c565b604082015260a083013561419a81613888565b6060820152613f7460c08401613e6c565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c2257600080fd5b600061074b3683614062565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425457600080fd5b83018035915067ffffffffffffffff82111561426f57600080fd5b6020019150600581901b360382131561305457600080fd5b6000614295613e1884613d19565b80848252602080830192508560051b8501368111156142b357600080fd5b855b818110156142ef57803567ffffffffffffffff8111156142d55760008081fd5b6142e136828a01614062565b8652509382019382016142b5565b50919695505050505050565b60006040828403121561430d57600080fd5b6138818383613d3d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434c57600080fd5b83018035915067ffffffffffffffff82111561436757600080fd5b6020019150600681901b360382131561305457600080fd5b60008451614391818460208901613800565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143cd816001850160208a01613800565b600192019182015283516143e8816002840160208801613800565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261442a57600080fd5b83018035915067ffffffffffffffff82111561444557600080fd5b602001915060608102360382131561305457600080fd5b60006060828403121561446e57600080fd5b6138818383613d8c565b60006020828403121561448a57600080fd5b61388182613e6c565b600061010082840312156144a657600080fd5b6144ae613c5b565b823581526144bf8460208501613d3d565b60208201526144d18460608501613d8c565b604082015260c08301356144e481613888565b60608201526144f560e08401613e6c565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453257614532613f7f565b5060010190565b6000602080838503121561454c57600080fd5b825167ffffffffffffffff8082111561456457600080fd5b908401906080828703121561457857600080fd5b614580613ca7565b825181528383015161459181613888565b8185015260408301516145a38161400e565b60408201526060830151828111156145ba57600080fd5b80840193505086601f8401126145cf57600080fd5b825191506145df613e188361401c565b82815287858486010111156145f357600080fd5b61460283868301878701613800565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146385750805b601f850160051c820191505b8181101561465757828155600101614644565b505050505050565b815167ffffffffffffffff81111561467957614679613c2c565b61468d816146878454613fc1565b84614611565b602080601f8311600181146146e057600084156146aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614657565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561472d5788860151825594840194600190910190840161470e565b508582101561476957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147ba57600080fd5b81516138818161400e565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561483a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614828868351613a4b565b955093820193908201906001016147ee565b5050858403818701525050506148508185613987565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516148f2816079850160208801613800565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149506040830184613824565b949350505050565b60008251613c22818460208701613800565b60006020828403121561497c57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/linea/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600260a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/linea/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/linea-goerli/.chainId",
    "content": "59140"
  },
  {
    "path": "deployments/linea-goerli/.migrations.json",
    "content": "{\n  \"000001-registry\": 1693926089,\n  \"000002-eas\": 1693926148,\n  \"000003-register-initial-schemas\": 1693927856,\n  \"000004-name-initial-schemas\": 1693929568,\n  \"000005-eip712-proxy\": 1693929627\n}"
  },
  {
    "path": "deployments/linea-goerli/EAS.json",
    "content": "{\n  \"address\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x967c395f17ea5a5684cb60712f4c03263046bc639da0165db2c0b52b0c8cb480\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"4137157\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x1d6747cc16a4014e6effc9fa707094758d173e9927faa7bedc84dac05afeeff2\",\n    \"transactionHash\": \"0x967c395f17ea5a5684cb60712f4c03263046bc639da0165db2c0b52b0c8cb480\",\n    \"logs\": [],\n    \"blockNumber\": 1480090,\n    \"cumulativeGasUsed\": \"4158157\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 2, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUids = new bytes32[][](length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUids = new bytes32[][](length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidsCount Total UIDs count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidsCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidsCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUids = uidLists[i];\\\\n            uint256 currentUidsLength = currentUids.length;\\\\n            for (uint256 j = 0; j < currentUidsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUids[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfd2c344003511c081573a628dccdf8664f4a222ce0a9aa3adf5a0d8d28148ee4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xf83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0x2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7f334240224ebcf472ea0c8385df95515a7f253d4d3ebb65ddb9b58f3323ba7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e4a38038062004e4a83398101604081905262000035916200020d565b604080518082018252600381526245415360e81b602080830191909152825180840190935260058352640312e322e360dc1b908301526001608052600260a052600060c0819052909190829082906200009090839062000188565b61018052620000a181600162000188565b6101a052815160208084019190912061014052815190820120610160524661010052620001326101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e0525050306101205260026200014a8382620002e4565b5050506001600160a01b03811662000175576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000425565b6000602083511015620001a857620001a083620001c1565b9050620001bb565b81620001b58482620002e4565b5060ff90505b92915050565b600080829050601f81511115620001f8578260405163305a27a960e01b8152600401620001ef9190620003b0565b60405180910390fd5b8051620002058262000400565b179392505050565b6000602082840312156200022057600080fd5b81516001600160a01b03811681146200023857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026a57607f821691505b6020821081036200028b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002df57600081815260208120601f850160051c81016020861015620002ba5750805b601f850160051c820191505b81811015620002db57828155600101620002c6565b5050505b505050565b81516001600160401b038111156200030057620003006200023f565b620003188162000311845462000255565b8462000291565b602080601f831160018114620003505760008415620003375750858301515b600019600386901b1c1916600185901b178555620002db565b600085815260208120601f198616915b82811015620003815788860151825594840194600190910190840162000360565b5085821015620003a05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003df57858101830151858201604001528201620003c1565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028b5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614990620004ba60003960008181610538015281816115df0152611f0a01526000610d4f01526000610d25015260006129930152600061296b015260006128c6015260006128f00152600061291a01526000610c3401526000610c0b01526000610be201526149906000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137be565b610575565b005b3480156101bc57600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137be565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061386e565b34801561025957600080fd5b506101df6102683660046138ba565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138d7565b6107e3565b6102b66102b13660046137be565b6108e6565b6040516101e99190613912565b6101ae6102d1366004613956565b610a67565b6101ae6102e43660046137be565b610aeb565b3480156102f557600080fd5b5061021261030436600461396e565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461396e565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139c2565b6102b66103743660046137be565b610dbb565b34801561038557600080fd5b5061039961039436600461396e565b61102e565b6040516101e99190613b32565b6101ae6103b4366004613b45565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b58565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101df565b34801561045257600080fd5b5061021261046136600461396e565b611295565b34801561047257600080fd5b5061021261048136600461396e565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461396e565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137be565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b84565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bbf565b90506020028101906105cd9190613bee565b6105d690613e84565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bbf565b602002602001015181526020018660400151848151811061068257610682613bbf565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a88611596565b6106ee9088613fae565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bbf565b9050602002013585611be7565b600101610712565b50909150505b92915050565b60606002805461076090613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fc1565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614130565b611ce6565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141ab565b610884906141df565b8160008151811061089757610897613bbf565b60209081029190910101526108c08335826108b860c0870160a088016138ba565b346001611e64565b602001516000815181106108d6576108d6613bbf565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c2c565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bbf565b905060200281019061099191906141eb565b90506109a0602082018261421f565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef602085018561421f565b6109f891614287565b338887611e64565b8051909150610a0f9086613fae565b94508060200151878581518110610a2857610a28613bbf565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612597565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142fb565b81600081518110610acc57610acc613bbf565b6020908102919091010152610ae682358233346001611596565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bbf565b9050602002810190610b4291906141eb565b9050610baf8135610b566020840184614317565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142fb565b81526020019060010190610b76565b5050505050338886611596565b610bb99086613fae565b94505050610bc78160010190565b9050610af0565b60004261074b8382612681565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612743565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612743565b610c587f0000000000000000000000000000000000000000000000000000000000000000612743565b604051602001610c6a9392919061437f565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612801565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612801565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c2c565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bbf565b9050602002810190610e669190613bee565b9050366000610e78602084018461421f565b909250905080801580610e995750610e9360408501856143f5565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bbf565b9050602002810190610f1791906141ab565b610f20906141df565b8152602001610f3260408901896143f5565b85818110610f4257610f42613bbf565b905060600201803603810190610f58919061445c565b8152602001610f6d6080890160608a016138ba565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a01614478565b67ffffffffffffffff169052611ce6565b600101610ed3565b506000610fda8535610fc38587614287565b610fd36080890160608a016138ba565b8b8a611e64565b8051909150610fe99089613fae565b975080602001518a888151811061100257611002613bbf565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613fc1565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b61120761120236839003830183614493565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e579050509050611259368390038301602084016142fb565b8160008151811061126c5761126c613bbf565b6020908102919091010152610ae682358261128d60e0860160c087016138ba565b346001611596565b60004261074b338483611be7565b60004282825b81811015610745576112d38686838181106112c6576112c6613bbf565b9050602002013584612681565b6001016112a9565b60006112e56128ac565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141ab565b61137b906141df565b8160008151811061138e5761138e613bbf565b60209081029190910101526108c083358233346001611e64565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152600390975293862080549596939593946114e4947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c9493928761148983614501565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206129e4565b905061155a84606001518284602001518560400151866000015160405160200161154693929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a2c565b611590576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611626573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261166c9190810190614539565b80519091506116a7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116c4576116c4613c2c565b60405190808252806020026020018201604052801561176357816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116e25790505b50905060008267ffffffffffffffff81111561178157611781613c2c565b6040519080825280602002602001820160405280156117aa578160200160208202803683370190505b50905060005b83811015611bc95760008a82815181106117cc576117cc613bbf565b6020908102919091018101518051600090815260049092526040909120805491925090611825576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611862576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118b8576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661190e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611968576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a7490613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090613fc1565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505050505081525050858481518110611b0857611b08613bbf565b60200260200101819052508160200151848481518110611b2a57611b2a613bbf565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b6057611b60613bbf565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bb791815260200190565b60405180910390a450506001016117b0565b50611bd984838360018b8b612aa7565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c5b576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d1a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d51576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081526003909b52978a208054999a979997986114e4987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611de483614501565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016114c9565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611ea957611ea9613c2c565b604051908082528060200260200182016040528015611ed2578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fac9190810190614539565b8051909150611fe7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561200257612002613c2c565b6040519080825280602002602001820160405280156120a157816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120205790505b50905060008467ffffffffffffffff8111156120bf576120bf613c2c565b6040519080825280602002602001820160405280156120e8578160200160208202803683370190505b50905060005b858110156125765760008b828151811061210a5761210a613bbf565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561215557504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561218c576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561219f575080604001515b156121d6576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121fa4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61229c8382612e96565b600081815260046020526040902054909250156122bb57600101612292565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061243a908261465f565b505050606084015115612491576060840151600090815260046020526040902054612491576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124a4576124a4613bbf565b60200260200101819052508360a001518686815181106124c6576124c6613bbf565b60200260200101818152505081896020015186815181106124e9576124e9613bbf565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161255991815260200190565b60405180910390a45050505061256f8160010190565b90506120ee565b5061258683838360008c8c612aa7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125b4576125b4613c2c565b6040519080825280602002602001820160405280156125dd578160200160208202803683370190505b508451909150600090815b8181101561267657600087828151811061260457612604613bbf565b6020026020010151905060008151905060005b818110156126625782818151811061263157612631613bbf565b602002602001015187878151811061264b5761264b613bbf565b602090810291909101015260019586019501612617565b50505061266f8160010190565b90506125e8565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126d1576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061275083612ef5565b600101905060008167ffffffffffffffff81111561277057612770613c2c565b6040519080825280601f01601f19166020018201604052801561279a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127a457509392505050565b606060ff831461281b5761281483612fd7565b905061074b565b81805461282790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461285390613fc1565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561291257507f000000000000000000000000000000000000000000000000000000000000000046145b1561293c57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b6129f16128ac565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a3b8585613016565b90925090506000816004811115612a5457612a54614779565b148015612a8c57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a9d5750612a9d86868661305b565b9695505050505050565b84516000906001819003612aff57612af78888600081518110612acc57612acc613bbf565b602002602001015188600081518110612ae757612ae7613bbf565b60200260200101518888886131b8565b915050612a9d565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612ba05760005b82811015612b8557878181518110612b3c57612b3c613bbf565b6020026020010151600014612b7d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b22565b508315612b9557612b95856134d7565b600092505050612a9d565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1291906147a8565b905060005b84811015612ccf5760008a8281518110612c3357612c33613bbf565b6020026020010151905080600003612c4b5750612cc7565b82612c82576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612cbc576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c17565b508715612daa576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d2c908e908e906004016147c5565b60206040518083038185885af1158015612d4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6f91906147a8565b612da5576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e79565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e00908e908e906004016147c5565b60206040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4391906147a8565b612e79576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e8857612e88876134d7565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612ed799989796918c9101614859565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f3e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f6a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f8857662386f26fc10000830492506010015b6305f5e1008310612fa0576305f5e100830492506008015b6127108310612fb457612710830492506004015b60648310612fc6576064830492506002015b600a831061074b5760010192915050565b60606000612fe4836134ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361304c5760208301516040840151606085015160001a6130408782858561352b565b94509450505050613054565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8686604051602401613092929190614937565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161311b9190614958565b600060405180830381855afa9150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b509150915081801561316f57506020815110155b8015612a9d575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131ad908301602090810190840161496a565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322c578515613213576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322257613222846134d7565b6000915050612a9d565b8515613317578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a191906147a8565b6132d7576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613311576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133ef576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613371908b90600401613b32565b60206040518083038185885af115801561338f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b491906147a8565b6133ea576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bc565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613443908b90600401613b32565b60206040518083038185885af1158015613461573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348691906147a8565b6134bc576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134cb576134cb846134d7565b50939695505050505050565b80156134e7576134e7338261361a565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135625750600090506003613611565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135b6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661360a57600060019250925050613611565b9150600090505b94509492505050565b80471015613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136e3576040519150601f19603f3d011682016040523d82523d6000602084013e6136e8565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613680565b60008083601f84011261378b57600080fd5b50813567ffffffffffffffff8111156137a357600080fd5b6020830191508360208260051b850101111561305457600080fd5b600080602083850312156137d157600080fd5b823567ffffffffffffffff8111156137e857600080fd5b6137f485828601613779565b90969095509350505050565b60005b8381101561381b578181015183820152602001613803565b50506000910152565b6000815180845261383c816020860160208601613800565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138816020830184613824565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134e757600080fd5b80356138b581613888565b919050565b6000602082840312156138cc57600080fd5b813561388181613888565b6000602082840312156138e957600080fd5b813567ffffffffffffffff81111561390057600080fd5b820160e0818503121561388157600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561394a5783518352928401929184019160010161392e565b50909695505050505050565b60006060828403121561396857600080fd5b50919050565b60006020828403121561398057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139b75781518752958201959082019060010161399b565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139fd60e0830189613824565b8281036040840152613a0f8189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bd98185613987565b600061014082518452602083015160208501526040830151613a79604086018267ffffffffffffffff169052565b506060830151613a95606086018267ffffffffffffffff169052565b506080830151613ab1608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613ae360c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b0b60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612a9d83870182613824565b6020815260006138816020830184613a4b565b6000610100828403121561396857600080fd5b60008060408385031215613b6b57600080fd5b8235613b7681613888565b946020939093013593505050565b600060208284031215613b9657600080fd5b813567ffffffffffffffff811115613bad57600080fd5b82016040818503121561388157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c2257600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b6040516080810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d1157613d11613c2c565b604052919050565b600067ffffffffffffffff821115613d3357613d33613c2c565b5060051b60200190565b600060408284031215613d4f57600080fd5b6040516040810181811067ffffffffffffffff82111715613d7257613d72613c2c565b604052823581526020928301359281019290925250919050565b600060608284031215613d9e57600080fd5b6040516060810181811067ffffffffffffffff82111715613dc157613dc1613c2c565b604052905080823560ff81168114613dd857600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e0857600080fd5b81356020613e1d613e1883613d19565b613cca565b82815260609283028501820192828201919087851115613e3c57600080fd5b8387015b85811015613e5f57613e528982613d8c565b8452928401928101613e40565b5090979650505050505050565b803567ffffffffffffffff811681146138b557600080fd5b600060a08236031215613e9657600080fd5b613e9e613c5b565b8235815260208084013567ffffffffffffffff80821115613ebe57600080fd5b9085019036601f830112613ed157600080fd5b8135613edf613e1882613d19565b81815260069190911b83018401908481019036831115613efe57600080fd5b938501935b82851015613f2757613f153686613d3d565b82528582019150604085019450613f03565b80868801525050506040860135925080831115613f4357600080fd5b5050613f5136828601613df7565b604083015250613f63606084016138aa565b6060820152613f7460808401613e6c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f7f565b600181811c90821680613fd557607f821691505b602082108103613968577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80151581146134e757600080fd5b600067ffffffffffffffff82111561403657614036613c2c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561407457600080fd5b61407c613c84565b9050813561408981613888565b81526020614098838201613e6c565b8183015260408301356140aa8161400e565b604083015260608381013590830152608083013567ffffffffffffffff8111156140d357600080fd5b8301601f810185136140e457600080fd5b80356140f2613e188261401c565b818152868483850101111561410657600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561414257600080fd5b61414a613c5b565b82358152602083013567ffffffffffffffff81111561416857600080fd5b61417436828601614062565b6020830152506141873660408501613d8c565b604082015260a083013561419a81613888565b6060820152613f7460c08401613e6c565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c2257600080fd5b600061074b3683614062565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425457600080fd5b83018035915067ffffffffffffffff82111561426f57600080fd5b6020019150600581901b360382131561305457600080fd5b6000614295613e1884613d19565b80848252602080830192508560051b8501368111156142b357600080fd5b855b818110156142ef57803567ffffffffffffffff8111156142d55760008081fd5b6142e136828a01614062565b8652509382019382016142b5565b50919695505050505050565b60006040828403121561430d57600080fd5b6138818383613d3d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434c57600080fd5b83018035915067ffffffffffffffff82111561436757600080fd5b6020019150600681901b360382131561305457600080fd5b60008451614391818460208901613800565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143cd816001850160208a01613800565b600192019182015283516143e8816002840160208801613800565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261442a57600080fd5b83018035915067ffffffffffffffff82111561444557600080fd5b602001915060608102360382131561305457600080fd5b60006060828403121561446e57600080fd5b6138818383613d8c565b60006020828403121561448a57600080fd5b61388182613e6c565b600061010082840312156144a657600080fd5b6144ae613c5b565b823581526144bf8460208501613d3d565b60208201526144d18460608501613d8c565b604082015260c08301356144e481613888565b60608201526144f560e08401613e6c565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453257614532613f7f565b5060010190565b6000602080838503121561454c57600080fd5b825167ffffffffffffffff8082111561456457600080fd5b908401906080828703121561457857600080fd5b614580613ca7565b825181528383015161459181613888565b8185015260408301516145a38161400e565b60408201526060830151828111156145ba57600080fd5b80840193505086601f8401126145cf57600080fd5b825191506145df613e188361401c565b82815287858486010111156145f357600080fd5b61460283868301878701613800565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146385750805b601f850160051c820191505b8181101561465757828155600101614644565b505050505050565b815167ffffffffffffffff81111561467957614679613c2c565b61468d816146878454613fc1565b84614611565b602080601f8311600181146146e057600084156146aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614657565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561472d5788860151825594840194600190910190840161470e565b508582101561476957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147ba57600080fd5b81516138818161400e565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561483a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614828868351613a4b565b955093820193908201906001016147ee565b5050858403818701525050506148508185613987565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516148f2816079850160208801613800565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149506040830184613824565b949350505050565b60008251613c22818460208701613800565b60006020828403121561497c57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137be565b610575565b005b3480156101bc57600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137be565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061386e565b34801561025957600080fd5b506101df6102683660046138ba565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138d7565b6107e3565b6102b66102b13660046137be565b6108e6565b6040516101e99190613912565b6101ae6102d1366004613956565b610a67565b6101ae6102e43660046137be565b610aeb565b3480156102f557600080fd5b5061021261030436600461396e565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461396e565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139c2565b6102b66103743660046137be565b610dbb565b34801561038557600080fd5b5061039961039436600461396e565b61102e565b6040516101e99190613b32565b6101ae6103b4366004613b45565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b58565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101df565b34801561045257600080fd5b5061021261046136600461396e565b611295565b34801561047257600080fd5b5061021261048136600461396e565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461396e565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137be565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b84565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bbf565b90506020028101906105cd9190613bee565b6105d690613e84565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bbf565b602002602001015181526020018660400151848151811061068257610682613bbf565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a88611596565b6106ee9088613fae565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bbf565b9050602002013585611be7565b600101610712565b50909150505b92915050565b60606002805461076090613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fc1565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614130565b611ce6565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141ab565b610884906141df565b8160008151811061089757610897613bbf565b60209081029190910101526108c08335826108b860c0870160a088016138ba565b346001611e64565b602001516000815181106108d6576108d6613bbf565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c2c565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bbf565b905060200281019061099191906141eb565b90506109a0602082018261421f565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef602085018561421f565b6109f891614287565b338887611e64565b8051909150610a0f9086613fae565b94508060200151878581518110610a2857610a28613bbf565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612597565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142fb565b81600081518110610acc57610acc613bbf565b6020908102919091010152610ae682358233346001611596565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bbf565b9050602002810190610b4291906141eb565b9050610baf8135610b566020840184614317565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142fb565b81526020019060010190610b76565b5050505050338886611596565b610bb99086613fae565b94505050610bc78160010190565b9050610af0565b60004261074b8382612681565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612743565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612743565b610c587f0000000000000000000000000000000000000000000000000000000000000000612743565b604051602001610c6a9392919061437f565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612801565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612801565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c2c565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bbf565b9050602002810190610e669190613bee565b9050366000610e78602084018461421f565b909250905080801580610e995750610e9360408501856143f5565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bbf565b9050602002810190610f1791906141ab565b610f20906141df565b8152602001610f3260408901896143f5565b85818110610f4257610f42613bbf565b905060600201803603810190610f58919061445c565b8152602001610f6d6080890160608a016138ba565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a01614478565b67ffffffffffffffff169052611ce6565b600101610ed3565b506000610fda8535610fc38587614287565b610fd36080890160608a016138ba565b8b8a611e64565b8051909150610fe99089613fae565b975080602001518a888151811061100257611002613bbf565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613fc1565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b61120761120236839003830183614493565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e579050509050611259368390038301602084016142fb565b8160008151811061126c5761126c613bbf565b6020908102919091010152610ae682358261128d60e0860160c087016138ba565b346001611596565b60004261074b338483611be7565b60004282825b81811015610745576112d38686838181106112c6576112c6613bbf565b9050602002013584612681565b6001016112a9565b60006112e56128ac565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141ab565b61137b906141df565b8160008151811061138e5761138e613bbf565b60209081029190910101526108c083358233346001611e64565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152600390975293862080549596939593946114e4947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c9493928761148983614501565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206129e4565b905061155a84606001518284602001518560400151866000015160405160200161154693929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a2c565b611590576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611626573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261166c9190810190614539565b80519091506116a7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116c4576116c4613c2c565b60405190808252806020026020018201604052801561176357816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116e25790505b50905060008267ffffffffffffffff81111561178157611781613c2c565b6040519080825280602002602001820160405280156117aa578160200160208202803683370190505b50905060005b83811015611bc95760008a82815181106117cc576117cc613bbf565b6020908102919091018101518051600090815260049092526040909120805491925090611825576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611862576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118b8576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661190e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611968576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a7490613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090613fc1565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505050505081525050858481518110611b0857611b08613bbf565b60200260200101819052508160200151848481518110611b2a57611b2a613bbf565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b6057611b60613bbf565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bb791815260200190565b60405180910390a450506001016117b0565b50611bd984838360018b8b612aa7565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c5b576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d1a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d51576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081526003909b52978a208054999a979997986114e4987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611de483614501565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016114c9565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611ea957611ea9613c2c565b604051908082528060200260200182016040528015611ed2578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fac9190810190614539565b8051909150611fe7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561200257612002613c2c565b6040519080825280602002602001820160405280156120a157816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120205790505b50905060008467ffffffffffffffff8111156120bf576120bf613c2c565b6040519080825280602002602001820160405280156120e8578160200160208202803683370190505b50905060005b858110156125765760008b828151811061210a5761210a613bbf565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561215557504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561218c576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561219f575080604001515b156121d6576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121fa4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61229c8382612e96565b600081815260046020526040902054909250156122bb57600101612292565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061243a908261465f565b505050606084015115612491576060840151600090815260046020526040902054612491576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124a4576124a4613bbf565b60200260200101819052508360a001518686815181106124c6576124c6613bbf565b60200260200101818152505081896020015186815181106124e9576124e9613bbf565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161255991815260200190565b60405180910390a45050505061256f8160010190565b90506120ee565b5061258683838360008c8c612aa7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125b4576125b4613c2c565b6040519080825280602002602001820160405280156125dd578160200160208202803683370190505b508451909150600090815b8181101561267657600087828151811061260457612604613bbf565b6020026020010151905060008151905060005b818110156126625782818151811061263157612631613bbf565b602002602001015187878151811061264b5761264b613bbf565b602090810291909101015260019586019501612617565b50505061266f8160010190565b90506125e8565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126d1576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061275083612ef5565b600101905060008167ffffffffffffffff81111561277057612770613c2c565b6040519080825280601f01601f19166020018201604052801561279a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127a457509392505050565b606060ff831461281b5761281483612fd7565b905061074b565b81805461282790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461285390613fc1565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561291257507f000000000000000000000000000000000000000000000000000000000000000046145b1561293c57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b6129f16128ac565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a3b8585613016565b90925090506000816004811115612a5457612a54614779565b148015612a8c57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a9d5750612a9d86868661305b565b9695505050505050565b84516000906001819003612aff57612af78888600081518110612acc57612acc613bbf565b602002602001015188600081518110612ae757612ae7613bbf565b60200260200101518888886131b8565b915050612a9d565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612ba05760005b82811015612b8557878181518110612b3c57612b3c613bbf565b6020026020010151600014612b7d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b22565b508315612b9557612b95856134d7565b600092505050612a9d565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1291906147a8565b905060005b84811015612ccf5760008a8281518110612c3357612c33613bbf565b6020026020010151905080600003612c4b5750612cc7565b82612c82576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612cbc576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c17565b508715612daa576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d2c908e908e906004016147c5565b60206040518083038185885af1158015612d4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6f91906147a8565b612da5576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e79565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e00908e908e906004016147c5565b60206040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4391906147a8565b612e79576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e8857612e88876134d7565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612ed799989796918c9101614859565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f3e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f6a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f8857662386f26fc10000830492506010015b6305f5e1008310612fa0576305f5e100830492506008015b6127108310612fb457612710830492506004015b60648310612fc6576064830492506002015b600a831061074b5760010192915050565b60606000612fe4836134ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361304c5760208301516040840151606085015160001a6130408782858561352b565b94509450505050613054565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8686604051602401613092929190614937565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161311b9190614958565b600060405180830381855afa9150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b509150915081801561316f57506020815110155b8015612a9d575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131ad908301602090810190840161496a565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322c578515613213576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322257613222846134d7565b6000915050612a9d565b8515613317578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a191906147a8565b6132d7576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613311576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133ef576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613371908b90600401613b32565b60206040518083038185885af115801561338f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b491906147a8565b6133ea576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bc565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613443908b90600401613b32565b60206040518083038185885af1158015613461573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348691906147a8565b6134bc576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134cb576134cb846134d7565b50939695505050505050565b80156134e7576134e7338261361a565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135625750600090506003613611565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135b6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661360a57600060019250925050613611565b9150600090505b94509492505050565b80471015613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136e3576040519150601f19603f3d011682016040523d82523d6000602084013e6136e8565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613680565b60008083601f84011261378b57600080fd5b50813567ffffffffffffffff8111156137a357600080fd5b6020830191508360208260051b850101111561305457600080fd5b600080602083850312156137d157600080fd5b823567ffffffffffffffff8111156137e857600080fd5b6137f485828601613779565b90969095509350505050565b60005b8381101561381b578181015183820152602001613803565b50506000910152565b6000815180845261383c816020860160208601613800565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138816020830184613824565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134e757600080fd5b80356138b581613888565b919050565b6000602082840312156138cc57600080fd5b813561388181613888565b6000602082840312156138e957600080fd5b813567ffffffffffffffff81111561390057600080fd5b820160e0818503121561388157600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561394a5783518352928401929184019160010161392e565b50909695505050505050565b60006060828403121561396857600080fd5b50919050565b60006020828403121561398057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139b75781518752958201959082019060010161399b565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139fd60e0830189613824565b8281036040840152613a0f8189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bd98185613987565b600061014082518452602083015160208501526040830151613a79604086018267ffffffffffffffff169052565b506060830151613a95606086018267ffffffffffffffff169052565b506080830151613ab1608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613ae360c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b0b60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612a9d83870182613824565b6020815260006138816020830184613a4b565b6000610100828403121561396857600080fd5b60008060408385031215613b6b57600080fd5b8235613b7681613888565b946020939093013593505050565b600060208284031215613b9657600080fd5b813567ffffffffffffffff811115613bad57600080fd5b82016040818503121561388157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c2257600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b6040516080810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d1157613d11613c2c565b604052919050565b600067ffffffffffffffff821115613d3357613d33613c2c565b5060051b60200190565b600060408284031215613d4f57600080fd5b6040516040810181811067ffffffffffffffff82111715613d7257613d72613c2c565b604052823581526020928301359281019290925250919050565b600060608284031215613d9e57600080fd5b6040516060810181811067ffffffffffffffff82111715613dc157613dc1613c2c565b604052905080823560ff81168114613dd857600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e0857600080fd5b81356020613e1d613e1883613d19565b613cca565b82815260609283028501820192828201919087851115613e3c57600080fd5b8387015b85811015613e5f57613e528982613d8c565b8452928401928101613e40565b5090979650505050505050565b803567ffffffffffffffff811681146138b557600080fd5b600060a08236031215613e9657600080fd5b613e9e613c5b565b8235815260208084013567ffffffffffffffff80821115613ebe57600080fd5b9085019036601f830112613ed157600080fd5b8135613edf613e1882613d19565b81815260069190911b83018401908481019036831115613efe57600080fd5b938501935b82851015613f2757613f153686613d3d565b82528582019150604085019450613f03565b80868801525050506040860135925080831115613f4357600080fd5b5050613f5136828601613df7565b604083015250613f63606084016138aa565b6060820152613f7460808401613e6c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f7f565b600181811c90821680613fd557607f821691505b602082108103613968577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80151581146134e757600080fd5b600067ffffffffffffffff82111561403657614036613c2c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561407457600080fd5b61407c613c84565b9050813561408981613888565b81526020614098838201613e6c565b8183015260408301356140aa8161400e565b604083015260608381013590830152608083013567ffffffffffffffff8111156140d357600080fd5b8301601f810185136140e457600080fd5b80356140f2613e188261401c565b818152868483850101111561410657600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561414257600080fd5b61414a613c5b565b82358152602083013567ffffffffffffffff81111561416857600080fd5b61417436828601614062565b6020830152506141873660408501613d8c565b604082015260a083013561419a81613888565b6060820152613f7460c08401613e6c565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c2257600080fd5b600061074b3683614062565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425457600080fd5b83018035915067ffffffffffffffff82111561426f57600080fd5b6020019150600581901b360382131561305457600080fd5b6000614295613e1884613d19565b80848252602080830192508560051b8501368111156142b357600080fd5b855b818110156142ef57803567ffffffffffffffff8111156142d55760008081fd5b6142e136828a01614062565b8652509382019382016142b5565b50919695505050505050565b60006040828403121561430d57600080fd5b6138818383613d3d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434c57600080fd5b83018035915067ffffffffffffffff82111561436757600080fd5b6020019150600681901b360382131561305457600080fd5b60008451614391818460208901613800565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143cd816001850160208a01613800565b600192019182015283516143e8816002840160208801613800565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261442a57600080fd5b83018035915067ffffffffffffffff82111561444557600080fd5b602001915060608102360382131561305457600080fd5b60006060828403121561446e57600080fd5b6138818383613d8c565b60006020828403121561448a57600080fd5b61388182613e6c565b600061010082840312156144a657600080fd5b6144ae613c5b565b823581526144bf8460208501613d3d565b60208201526144d18460608501613d8c565b604082015260c08301356144e481613888565b60608201526144f560e08401613e6c565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453257614532613f7f565b5060010190565b6000602080838503121561454c57600080fd5b825167ffffffffffffffff8082111561456457600080fd5b908401906080828703121561457857600080fd5b614580613ca7565b825181528383015161459181613888565b8185015260408301516145a38161400e565b60408201526060830151828111156145ba57600080fd5b80840193505086601f8401126145cf57600080fd5b825191506145df613e188361401c565b82815287858486010111156145f357600080fd5b61460283868301878701613800565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146385750805b601f850160051c820191505b8181101561465757828155600101614644565b505050505050565b815167ffffffffffffffff81111561467957614679613c2c565b61468d816146878454613fc1565b84614611565b602080601f8311600181146146e057600084156146aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614657565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561472d5788860151825594840194600190910190840161470e565b508582101561476957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147ba57600080fd5b81516138818161400e565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561483a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614828868351613a4b565b955093820193908201906001016147ee565b5050858403818701525050506148508185613987565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516148f2816079850160208801613800565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149506040830184613824565b949350505050565b60008251613c22818460208701613800565b60006020828403121561497c57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6388,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6392,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3954,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\"\n      },\n      {\n        \"astId\": 3958,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3964,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3848_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3848_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3829,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3831,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3833,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3835,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3837,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3839,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3841,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3843,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3845,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3847,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/linea-goerli/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x17b988a3cc587cc37588dee22df435f2b41a969bde43c1fd7ae9f4af884030d7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2300386\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x0818c3155706be539c3ea8633c9a0e38a72285b81fe794389335de77828c6e6d\",\n    \"transactionHash\": \"0x17b988a3cc587cc37588dee22df435f2b41a969bde43c1fd7ae9f4af884030d7\",\n    \"logs\": [],\n    \"blockNumber\": 1480277,\n    \"cumulativeGasUsed\": \"2321386\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6788,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6792,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 6796,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/linea-goerli/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x44bf8f49130b899827984b3ba97f33c0caab299922dab8fa707e5a13571db188\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"631544\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xde69db7a377aa79c0503a2892ee2c09b1ceaa671a1e38d31899a22ee4d0ade53\",\n    \"transactionHash\": \"0x44bf8f49130b899827984b3ba97f33c0caab299922dab8fa707e5a13571db188\",\n    \"logs\": [],\n    \"blockNumber\": 1480087,\n    \"cumulativeGasUsed\": \"687736\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"4815fa92859e337c29529f019e92192d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 2, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcb0f2a8edb56bc5bba9d81d7501f3911c257e8dcf905ea7428e37a45c441d901\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600260a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6182,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)6125_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)7768\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)6125_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)6125_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)6125_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 6117,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 6120,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)7768\"\n          },\n          {\n            \"astId\": 6122,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 6124,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/linea-goerli/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/linea-goerli/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/linea-goerli/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/linea-goerli/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e4a38038062004e4a83398101604081905262000035916200020d565b604080518082018252600381526245415360e81b602080830191909152825180840190935260058352640312e322e360dc1b908301526001608052600260a052600060c0819052909190829082906200009090839062000188565b61018052620000a181600162000188565b6101a052815160208084019190912061014052815190820120610160524661010052620001326101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e0525050306101205260026200014a8382620002e4565b5050506001600160a01b03811662000175576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000425565b6000602083511015620001a857620001a083620001c1565b9050620001bb565b81620001b58482620002e4565b5060ff90505b92915050565b600080829050601f81511115620001f8578260405163305a27a960e01b8152600401620001ef9190620003b0565b60405180910390fd5b8051620002058262000400565b179392505050565b6000602082840312156200022057600080fd5b81516001600160a01b03811681146200023857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026a57607f821691505b6020821081036200028b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002df57600081815260208120601f850160051c81016020861015620002ba5750805b601f850160051c820191505b81811015620002db57828155600101620002c6565b5050505b505050565b81516001600160401b038111156200030057620003006200023f565b620003188162000311845462000255565b8462000291565b602080601f831160018114620003505760008415620003375750858301515b600019600386901b1c1916600185901b178555620002db565b600085815260208120601f198616915b82811015620003815788860151825594840194600190910190840162000360565b5085821015620003a05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003df57858101830151858201604001528201620003c1565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028b5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614990620004ba60003960008181610538015281816115df0152611f0a01526000610d4f01526000610d25015260006129930152600061296b015260006128c6015260006128f00152600061291a01526000610c3401526000610c0b01526000610be201526149906000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137be565b610575565b005b3480156101bc57600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137be565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061386e565b34801561025957600080fd5b506101df6102683660046138ba565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138d7565b6107e3565b6102b66102b13660046137be565b6108e6565b6040516101e99190613912565b6101ae6102d1366004613956565b610a67565b6101ae6102e43660046137be565b610aeb565b3480156102f557600080fd5b5061021261030436600461396e565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461396e565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139c2565b6102b66103743660046137be565b610dbb565b34801561038557600080fd5b5061039961039436600461396e565b61102e565b6040516101e99190613b32565b6101ae6103b4366004613b45565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b58565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101df565b34801561045257600080fd5b5061021261046136600461396e565b611295565b34801561047257600080fd5b5061021261048136600461396e565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461396e565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137be565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b84565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bbf565b90506020028101906105cd9190613bee565b6105d690613e84565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bbf565b602002602001015181526020018660400151848151811061068257610682613bbf565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a88611596565b6106ee9088613fae565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bbf565b9050602002013585611be7565b600101610712565b50909150505b92915050565b60606002805461076090613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fc1565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614130565b611ce6565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141ab565b610884906141df565b8160008151811061089757610897613bbf565b60209081029190910101526108c08335826108b860c0870160a088016138ba565b346001611e64565b602001516000815181106108d6576108d6613bbf565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c2c565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bbf565b905060200281019061099191906141eb565b90506109a0602082018261421f565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef602085018561421f565b6109f891614287565b338887611e64565b8051909150610a0f9086613fae565b94508060200151878581518110610a2857610a28613bbf565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612597565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142fb565b81600081518110610acc57610acc613bbf565b6020908102919091010152610ae682358233346001611596565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bbf565b9050602002810190610b4291906141eb565b9050610baf8135610b566020840184614317565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142fb565b81526020019060010190610b76565b5050505050338886611596565b610bb99086613fae565b94505050610bc78160010190565b9050610af0565b60004261074b8382612681565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612743565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612743565b610c587f0000000000000000000000000000000000000000000000000000000000000000612743565b604051602001610c6a9392919061437f565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612801565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612801565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c2c565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bbf565b9050602002810190610e669190613bee565b9050366000610e78602084018461421f565b909250905080801580610e995750610e9360408501856143f5565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bbf565b9050602002810190610f1791906141ab565b610f20906141df565b8152602001610f3260408901896143f5565b85818110610f4257610f42613bbf565b905060600201803603810190610f58919061445c565b8152602001610f6d6080890160608a016138ba565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a01614478565b67ffffffffffffffff169052611ce6565b600101610ed3565b506000610fda8535610fc38587614287565b610fd36080890160608a016138ba565b8b8a611e64565b8051909150610fe99089613fae565b975080602001518a888151811061100257611002613bbf565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613fc1565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b61120761120236839003830183614493565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e579050509050611259368390038301602084016142fb565b8160008151811061126c5761126c613bbf565b6020908102919091010152610ae682358261128d60e0860160c087016138ba565b346001611596565b60004261074b338483611be7565b60004282825b81811015610745576112d38686838181106112c6576112c6613bbf565b9050602002013584612681565b6001016112a9565b60006112e56128ac565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141ab565b61137b906141df565b8160008151811061138e5761138e613bbf565b60209081029190910101526108c083358233346001611e64565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152600390975293862080549596939593946114e4947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c9493928761148983614501565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206129e4565b905061155a84606001518284602001518560400151866000015160405160200161154693929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a2c565b611590576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611626573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261166c9190810190614539565b80519091506116a7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116c4576116c4613c2c565b60405190808252806020026020018201604052801561176357816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116e25790505b50905060008267ffffffffffffffff81111561178157611781613c2c565b6040519080825280602002602001820160405280156117aa578160200160208202803683370190505b50905060005b83811015611bc95760008a82815181106117cc576117cc613bbf565b6020908102919091018101518051600090815260049092526040909120805491925090611825576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611862576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118b8576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661190e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611968576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a7490613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090613fc1565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b505050505081525050858481518110611b0857611b08613bbf565b60200260200101819052508160200151848481518110611b2a57611b2a613bbf565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b6057611b60613bbf565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bb791815260200190565b60405180910390a450506001016117b0565b50611bd984838360018b8b612aa7565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c5b576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d1a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d51576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081526003909b52978a208054999a979997986114e4987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611de483614501565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016114c9565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611ea957611ea9613c2c565b604051908082528060200260200182016040528015611ed2578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fac9190810190614539565b8051909150611fe7576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561200257612002613c2c565b6040519080825280602002602001820160405280156120a157816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120205790505b50905060008467ffffffffffffffff8111156120bf576120bf613c2c565b6040519080825280602002602001820160405280156120e8578160200160208202803683370190505b50905060005b858110156125765760008b828151811061210a5761210a613bbf565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561215557504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561218c576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561219f575080604001515b156121d6576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121fa4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61229c8382612e96565b600081815260046020526040902054909250156122bb57600101612292565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061243a908261465f565b505050606084015115612491576060840151600090815260046020526040902054612491576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124a4576124a4613bbf565b60200260200101819052508360a001518686815181106124c6576124c6613bbf565b60200260200101818152505081896020015186815181106124e9576124e9613bbf565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161255991815260200190565b60405180910390a45050505061256f8160010190565b90506120ee565b5061258683838360008c8c612aa7565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125b4576125b4613c2c565b6040519080825280602002602001820160405280156125dd578160200160208202803683370190505b508451909150600090815b8181101561267657600087828151811061260457612604613bbf565b6020026020010151905060008151905060005b818110156126625782818151811061263157612631613bbf565b602002602001015187878151811061264b5761264b613bbf565b602090810291909101015260019586019501612617565b50505061266f8160010190565b90506125e8565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126d1576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061275083612ef5565b600101905060008167ffffffffffffffff81111561277057612770613c2c565b6040519080825280601f01601f19166020018201604052801561279a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127a457509392505050565b606060ff831461281b5761281483612fd7565b905061074b565b81805461282790613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461285390613fc1565b80156128a05780601f10612875576101008083540402835291602001916128a0565b820191906000526020600020905b81548152906001019060200180831161288357829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561291257507f000000000000000000000000000000000000000000000000000000000000000046145b1561293c57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b6129f16128ac565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a3b8585613016565b90925090506000816004811115612a5457612a54614779565b148015612a8c57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a9d5750612a9d86868661305b565b9695505050505050565b84516000906001819003612aff57612af78888600081518110612acc57612acc613bbf565b602002602001015188600081518110612ae757612ae7613bbf565b60200260200101518888886131b8565b915050612a9d565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612ba05760005b82811015612b8557878181518110612b3c57612b3c613bbf565b6020026020010151600014612b7d576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b22565b508315612b9557612b95856134d7565b600092505050612a9d565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1291906147a8565b905060005b84811015612ccf5760008a8281518110612c3357612c33613bbf565b6020026020010151905080600003612c4b5750612cc7565b82612c82576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612cbc576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c17565b508715612daa576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d2c908e908e906004016147c5565b60206040518083038185885af1158015612d4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6f91906147a8565b612da5576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e79565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e00908e908e906004016147c5565b60206040518083038185885af1158015612e1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4391906147a8565b612e79576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e8857612e88876134d7565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612ed799989796918c9101614859565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f3e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f6a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f8857662386f26fc10000830492506010015b6305f5e1008310612fa0576305f5e100830492506008015b6127108310612fb457612710830492506004015b60648310612fc6576064830492506002015b600a831061074b5760010192915050565b60606000612fe4836134ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361304c5760208301516040840151606085015160001a6130408782858561352b565b94509450505050613054565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8686604051602401613092929190614937565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161311b9190614958565b600060405180830381855afa9150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b509150915081801561316f57506020815110155b8015612a9d575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131ad908301602090810190840161496a565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322c578515613213576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322257613222846134d7565b6000915050612a9d565b8515613317578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a191906147a8565b6132d7576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613311576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133ef576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613371908b90600401613b32565b60206040518083038185885af115801561338f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b491906147a8565b6133ea576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bc565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613443908b90600401613b32565b60206040518083038185885af1158015613461573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348691906147a8565b6134bc576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134cb576134cb846134d7565b50939695505050505050565b80156134e7576134e7338261361a565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135625750600090506003613611565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135b6573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661360a57600060019250925050613611565b9150600090505b94509492505050565b80471015613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136e3576040519150601f19603f3d011682016040523d82523d6000602084013e6136e8565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613680565b60008083601f84011261378b57600080fd5b50813567ffffffffffffffff8111156137a357600080fd5b6020830191508360208260051b850101111561305457600080fd5b600080602083850312156137d157600080fd5b823567ffffffffffffffff8111156137e857600080fd5b6137f485828601613779565b90969095509350505050565b60005b8381101561381b578181015183820152602001613803565b50506000910152565b6000815180845261383c816020860160208601613800565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138816020830184613824565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134e757600080fd5b80356138b581613888565b919050565b6000602082840312156138cc57600080fd5b813561388181613888565b6000602082840312156138e957600080fd5b813567ffffffffffffffff81111561390057600080fd5b820160e0818503121561388157600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561394a5783518352928401929184019160010161392e565b50909695505050505050565b60006060828403121561396857600080fd5b50919050565b60006020828403121561398057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139b75781518752958201959082019060010161399b565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139fd60e0830189613824565b8281036040840152613a0f8189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bd98185613987565b600061014082518452602083015160208501526040830151613a79604086018267ffffffffffffffff169052565b506060830151613a95606086018267ffffffffffffffff169052565b506080830151613ab1608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613ae360c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b0b60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612a9d83870182613824565b6020815260006138816020830184613a4b565b6000610100828403121561396857600080fd5b60008060408385031215613b6b57600080fd5b8235613b7681613888565b946020939093013593505050565b600060208284031215613b9657600080fd5b813567ffffffffffffffff811115613bad57600080fd5b82016040818503121561388157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c2257600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b6040516080810167ffffffffffffffff81118282101715613c7e57613c7e613c2c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d1157613d11613c2c565b604052919050565b600067ffffffffffffffff821115613d3357613d33613c2c565b5060051b60200190565b600060408284031215613d4f57600080fd5b6040516040810181811067ffffffffffffffff82111715613d7257613d72613c2c565b604052823581526020928301359281019290925250919050565b600060608284031215613d9e57600080fd5b6040516060810181811067ffffffffffffffff82111715613dc157613dc1613c2c565b604052905080823560ff81168114613dd857600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e0857600080fd5b81356020613e1d613e1883613d19565b613cca565b82815260609283028501820192828201919087851115613e3c57600080fd5b8387015b85811015613e5f57613e528982613d8c565b8452928401928101613e40565b5090979650505050505050565b803567ffffffffffffffff811681146138b557600080fd5b600060a08236031215613e9657600080fd5b613e9e613c5b565b8235815260208084013567ffffffffffffffff80821115613ebe57600080fd5b9085019036601f830112613ed157600080fd5b8135613edf613e1882613d19565b81815260069190911b83018401908481019036831115613efe57600080fd5b938501935b82851015613f2757613f153686613d3d565b82528582019150604085019450613f03565b80868801525050506040860135925080831115613f4357600080fd5b5050613f5136828601613df7565b604083015250613f63606084016138aa565b6060820152613f7460808401613e6c565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f7f565b600181811c90821680613fd557607f821691505b602082108103613968577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b80151581146134e757600080fd5b600067ffffffffffffffff82111561403657614036613c2c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561407457600080fd5b61407c613c84565b9050813561408981613888565b81526020614098838201613e6c565b8183015260408301356140aa8161400e565b604083015260608381013590830152608083013567ffffffffffffffff8111156140d357600080fd5b8301601f810185136140e457600080fd5b80356140f2613e188261401c565b818152868483850101111561410657600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561414257600080fd5b61414a613c5b565b82358152602083013567ffffffffffffffff81111561416857600080fd5b61417436828601614062565b6020830152506141873660408501613d8c565b604082015260a083013561419a81613888565b6060820152613f7460c08401613e6c565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c2257600080fd5b600061074b3683614062565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261425457600080fd5b83018035915067ffffffffffffffff82111561426f57600080fd5b6020019150600581901b360382131561305457600080fd5b6000614295613e1884613d19565b80848252602080830192508560051b8501368111156142b357600080fd5b855b818110156142ef57803567ffffffffffffffff8111156142d55760008081fd5b6142e136828a01614062565b8652509382019382016142b5565b50919695505050505050565b60006040828403121561430d57600080fd5b6138818383613d3d565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434c57600080fd5b83018035915067ffffffffffffffff82111561436757600080fd5b6020019150600681901b360382131561305457600080fd5b60008451614391818460208901613800565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143cd816001850160208a01613800565b600192019182015283516143e8816002840160208801613800565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261442a57600080fd5b83018035915067ffffffffffffffff82111561444557600080fd5b602001915060608102360382131561305457600080fd5b60006060828403121561446e57600080fd5b6138818383613d8c565b60006020828403121561448a57600080fd5b61388182613e6c565b600061010082840312156144a657600080fd5b6144ae613c5b565b823581526144bf8460208501613d3d565b60208201526144d18460608501613d8c565b604082015260c08301356144e481613888565b60608201526144f560e08401613e6c565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453257614532613f7f565b5060010190565b6000602080838503121561454c57600080fd5b825167ffffffffffffffff8082111561456457600080fd5b908401906080828703121561457857600080fd5b614580613ca7565b825181528383015161459181613888565b8185015260408301516145a38161400e565b60408201526060830151828111156145ba57600080fd5b80840193505086601f8401126145cf57600080fd5b825191506145df613e188361401c565b82815287858486010111156145f357600080fd5b61460283868301878701613800565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146385750805b601f850160051c820191505b8181101561465757828155600101614644565b505050505050565b815167ffffffffffffffff81111561467957614679613c2c565b61468d816146878454613fc1565b84614611565b602080601f8311600181146146e057600084156146aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614657565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561472d5788860151825594840194600190910190840161470e565b508582101561476957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147ba57600080fd5b81516138818161400e565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561483a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614828868351613a4b565b955093820193908201906001016147ee565b5050858403818701525050506148508185613987565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516148f2816079850160208801613800565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149506040830184613824565b949350505050565b60008251613c22818460208701613800565b60006020828403121561497c57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/linea-goerli/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600260a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/linea-goerli/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/mainnet/.chainId",
    "content": "1\n"
  },
  {
    "path": "deployments/mainnet/.migrations.json",
    "content": "{\n  \"000001-registry\": 1677952935,\n  \"000002-eas\": 1677952957,\n  \"000003-register-initial-schemas\": 1677953511,\n  \"000004-name-initial-schemas\": 1677954017\n}"
  },
  {
    "path": "deployments/mainnet/EAS.json",
    "content": "{\n  \"address\": \"0xA1207F3BBa224E2c9c3c6D5aF63D0eb1582Ce587\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xace43caab97ef0a7cfaea11590aa1db01f735f4517a5bcc5eaee5ab59f21d11a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x2bF22CAe1dc34f265cAE03F6ff419177b4f4FBb3\",\n    \"contractAddress\": \"0xA1207F3BBa224E2c9c3c6D5aF63D0eb1582Ce587\",\n    \"transactionIndex\": 31,\n    \"gasUsed\": \"4349707\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xc763756984ccb6df25f1b9c71cc70ccc5312ff9cf4d44e9d3b9930fe8b7379a3\",\n    \"transactionHash\": \"0xace43caab97ef0a7cfaea11590aa1db01f735f4517a5bcc5eaee5ab59f21d11a\",\n    \"logs\": [],\n    \"blockNumber\": 16756728,\n    \"cumulativeGasUsed\": \"6777974\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\"0xA7b39296258348C78294F95B872b282326A97BDF\"],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f4b7f486d6c32786b7e8d2904f9f6cf8\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"details\\\":\\\"Emitted when an attestation has been made.\\\",\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"details\\\":\\\"Emitted when an attestation has been revoked.\\\",\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"details\\\":\\\"Emitted when a data has been revoked.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"details\\\":\\\"Emitted when a data has been timestamped.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"details\\\":\\\"Attests to a specific schema.\\\",\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request. Example: attest({     schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",     data: {         recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",         expirationTime: 0,         revocable: true,         refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",         data: \\\\\\\"0xF00D\\\\\\\",         value: 0     } })\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation.\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\\\":{\\\"details\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\",\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request. Example: attestByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     signature: {         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e' })\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation.\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"details\\\":\\\"Returns an existing attestation by UID.\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"details\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getNonce(address)\\\":{\\\"details\\\":\\\"Returns the current nonce per-account.\\\",\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"details\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"details\\\":\\\"Returns the address of the global schema registry.\\\",\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"details\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"details\\\":\\\"Checks whether an attestation exists.\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"details\\\":\\\"Attests to multiple schemas.\\\",\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttest([{     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 1000     },     {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 0,         revocable: false,         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',         data: '0x00',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: true,         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',         data: '0x12345678',         value: 0     }, }])\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations.\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\\\":{\\\"details\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\",\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttestByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     {         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: false,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x00',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4' }])\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations.\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"details\\\":\\\"Revokes existing attestations to multiple schemas.\\\",\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevoke([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',         value: 0     }, }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\\\":{\\\"details\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\",\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"details\\\":\\\"Revokes the specified multiple bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"details\\\":\\\"Timestamps the specified multiple bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"details\\\":\\\"Revokes an existing attestation to a specific schema. Example: revoke({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',         value: 0     } })\\\",\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request.\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\\\":{\\\"details\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature. Example: revokeByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',         value: 0     },     signature: {         v: 27,         r: '0xb593...7142',         s: '0x0f5b...2cce'     },     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' })\\\",\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request.\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"details\\\":\\\"Revokes the specified bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"details\\\":\\\"Timestamps the specified bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}}},\\\"title\\\":\\\"EAS - Ethereum Attestation Service\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        bytes32 r,\\\\n        bytes32 vs\\\\n    ) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(\\\\n        bytes32 hash,\\\\n        bytes32 r,\\\\n        bytes32 vs\\\\n    ) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", hash));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\", domainSeparator, structHash));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * _Available since v3.4._\\\\n */\\\\nabstract contract EIP712 {\\\\n    /* solhint-disable var-name-mixedcase */\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\\\n    uint256 private immutable _CACHED_CHAIN_ID;\\\\n    address private immutable _CACHED_THIS;\\\\n\\\\n    bytes32 private immutable _HASHED_NAME;\\\\n    bytes32 private immutable _HASHED_VERSION;\\\\n    bytes32 private immutable _TYPE_HASH;\\\\n\\\\n    /* solhint-enable var-name-mixedcase */\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        bytes32 hashedName = keccak256(bytes(name));\\\\n        bytes32 hashedVersion = keccak256(bytes(version));\\\\n        bytes32 typeHash = keccak256(\\\\n            \\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\"\\\\n        );\\\\n        _HASHED_NAME = hashedName;\\\\n        _HASHED_VERSION = hashedVersion;\\\\n        _CACHED_CHAIN_ID = block.chainid;\\\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\\\n        _CACHED_THIS = address(this);\\\\n        _TYPE_HASH = typeHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\\\n            return _CACHED_DOMAIN_SEPARATOR;\\\\n        } else {\\\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator(\\\\n        bytes32 typeHash,\\\\n        bytes32 nameHash,\\\\n        bytes32 versionHash\\\\n    ) private view returns (bytes32) {\\\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(\\\\n        uint256 x,\\\\n        uint256 y,\\\\n        uint256 denominator\\\\n    ) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1);\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(\\\\n        uint256 x,\\\\n        uint256 y,\\\\n        uint256 denominator,\\\\n        Rounding rounding\\\\n    ) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10**64) {\\\\n                value /= 10**64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10**32) {\\\\n                value /= 10**32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10**16) {\\\\n                value /= 10**16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10**8) {\\\\n                value /= 10**8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10**4) {\\\\n                value /= 10**4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10**2) {\\\\n                value /= 10**2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10**1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID, EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { EIP712Verifier } from \\\\\\\"./EIP712Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nstruct AttestationsResult {\\\\n    uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n    bytes32[] uids; // UIDs of the new attestations.\\\\n}\\\\n\\\\n/**\\\\n * @title EAS - Ethereum Attestation Service\\\\n */\\\\ncontract EAS is IEAS, EIP712Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AccessDenied();\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidLength();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotFound();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    // The version of the contract.\\\\n    string public constant VERSION = \\\\\\\"0.26\\\\\\\";\\\\n\\\\n    // A zero expiration represents an non-expiring attestation.\\\\n    uint64 private constant NO_EXPIRATION_TIME = 0;\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp)) private _revocationsOffchain;\\\\n\\\\n    /**\\\\n     * @dev Creates a new EAS instance.\\\\n     *\\\\n     * @param registry The address of the global schema registry.\\\\n     */\\\\n    constructor(ISchemaRegistry registry) EIP712Verifier(VERSION) {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function attest(AttestationRequest calldata request) public payable virtual returns (bytes32) {\\\\n        AttestationRequestData[] memory requests = new AttestationRequestData[](1);\\\\n        requests[0] = request.data;\\\\n\\\\n        return _attest(request.schema, requests, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        bytes32[][] memory totalUids = new bytes32[][](multiRequests.length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiRequests.length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        bytes32[][] memory totalUids = new bytes32[][](multiDelegatedRequests.length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiDelegatedRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiDelegatedRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            if (data.length == 0 || data.length != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < data.length; ) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester\\\\n                    })\\\\n                );\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                }\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revoke(RevocationRequest calldata request) public payable virtual {\\\\n        RevocationRequestData[] memory requests = new RevocationRequestData[](1);\\\\n        requests[0] = request.data;\\\\n\\\\n        _revoke(request.schema, requests, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiDelegatedRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiDelegatedRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            if (data.length == 0 || data.length != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < data.length; ) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker\\\\n                    })\\\\n                );\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                }\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            _timestamp(data[i], time);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /**\\\\n      * @inheritdoc IEAS\\\\n      */\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema.\\\\n     *\\\\n     * @param schema // the unique identifier of the schema to attest to.\\\\n     * @param data The arguments of the attestation requests.\\\\n     * @param attester The attesting account.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return The UID of the new attestations and the total sent ETH amount.\\\\n     */\\\\n    function _attest(\\\\n        bytes32 schema,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schema);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schema,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != 0) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schema);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema.\\\\n     *\\\\n     * @param schema The unique identifier of the schema to attest to.\\\\n     * @param data The arguments of the revocation requests.\\\\n     * @param revoker The revoking account.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _revoke(\\\\n        bytes32 schema,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schema);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schema) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestation.recipient, revoker, request.uid, attestation.schema);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n     *\\\\n     * @param schemaRecord The schema of the attestation.\\\\n     * @param attestation The data of the attestation to make/revoke.\\\\n     * @param value An explicit ETH amount to send to the resolver.\\\\n     * @param isRevocation Whether to resolve an attestation or its revocation.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0 && !resolver.isPayable()) {\\\\n            revert NotPayable();\\\\n        }\\\\n\\\\n        // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n        if (value > availableValue) {\\\\n            revert InsufficientValue();\\\\n        }\\\\n\\\\n        // Ensure to deduct the sent value explicitly.\\\\n        unchecked {\\\\n            availableValue -= value;\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Resolves multiple attestations or revocations of existing attestations.\\\\n     *\\\\n     * @param schemaRecord The schema of the attestation.\\\\n     * @param attestations The data of the attestations to make/revoke.\\\\n     * @param values Explicit ETH amounts to send to the resolver.\\\\n     * @param isRevocation Whether to resolve an attestation or its revocation.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; ) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++i;\\\\n                }\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value != 0 && !resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Calculates a UID for a given attestation.\\\\n     *\\\\n     * @param attestation The input attestation.\\\\n     * @param bump A bump value to use in case of a UID conflict.\\\\n     *\\\\n     * @return Attestation UID.\\\\n     */\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Refunds remaining ETH amount to the attester.\\\\n     *\\\\n     * @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n     */\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Merges lists of UIDs.\\\\n     *\\\\n     * @param uidLists The provided lists of UIDs.\\\\n     * @param uidsCount Total UIDs count.\\\\n     *\\\\n     * @return A merged and flatten list of all the UIDs.\\\\n     */\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidsCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidsCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        for (uint256 i = 0; i < uidLists.length; ) {\\\\n            bytes32[] memory currentUids = uidLists[i];\\\\n            for (uint256 j = 0; j < currentUids.length; ) {\\\\n                uids[currentIndex] = currentUids[j];\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     * @param time The timestamp.\\\\n     */\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /**\\\\n         * @dev Timestamps the specified bytes32 data.\\\\n         *\\\\n         * @param data The data to timestamp.\\\\n         * @param time The timestamp.\\\\n         */\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n     * current block time.\\\\n     */\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8b7233cc7377d5d90ccffcd67c93287fda47bcdc92ca0df0b10c22bf35a3f231\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EIP712Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title EIP712 typed signatures verifier for EAS delegated attestations.\\\\n */\\\\nabstract contract EIP712Verifier is EIP712 {\\\\n    error InvalidSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 nonce)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de61;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 nonce)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address => uint256) private _nonces;\\\\n\\\\n    /**\\\\n     * @dev Creates a new EIP712Verifier instance.\\\\n     *\\\\n     * @param version The current major version of the signing domain\\\\n     */\\\\n    constructor(string memory version) EIP712(\\\\\\\"EAS\\\\\\\", version) {}\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n     */\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the current nonce per-account.\\\\n     *\\\\n     * @param account The requested account.\\\\n     *\\\\n     * @return The current nonce.\\\\n     */\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the EIP712 type hash for the attest function.\\\\n     */\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the EIP712 type hash for the revoke function.\\\\n     */\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Verifies delegated attestation request.\\\\n     *\\\\n     * @param request The arguments of the delegated attestation request.\\\\n     */\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        AttestationRequestData memory data = request.data;\\\\n        EIP712Signature memory signature = request.signature;\\\\n\\\\n        uint256 nonce;\\\\n        unchecked {\\\\n            nonce = _nonces[request.attester]++;\\\\n        }\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    nonce\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Verifies delegated revocation request.\\\\n     *\\\\n     * @param request The arguments of the delegated revocation request.\\\\n     */\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        RevocationRequestData memory data = request.data;\\\\n        EIP712Signature memory signature = request.signature;\\\\n\\\\n        uint256 nonce;\\\\n        unchecked {\\\\n            nonce = _nonces[request.revoker]++;\\\\n        }\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(REVOKE_TYPEHASH, request.schema, data.uid, nonce)));\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x373763eb3fa3bd3a8b7e839bfdc3319fbcd259d1029f227b88121c5450bdfae4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the attestation request.\\\\n */\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the attestation request.\\\\n */\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the full delegated attestation request.\\\\n */\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    EIP712Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the multi attestation request.\\\\n */\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the delegated multi attestation request.\\\\n */\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    EIP712Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the revocation request.\\\\n */\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the revocation request.\\\\n */\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the full delegated revocation request.\\\\n */\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    EIP712Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the multi revocation request.\\\\n */\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the delegated multi revocation request.\\\\n */\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    EIP712Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n}\\\\n\\\\n/**\\\\n * @title EAS - Ethereum Attestation Service interface.\\\\n */\\\\ninterface IEAS {\\\\n    /**\\\\n     * @dev Emitted when an attestation has been made.\\\\n     *\\\\n     * @param recipient The recipient of the attestation.\\\\n     * @param attester The attesting account.\\\\n     * @param uid The UID the revoked attestation.\\\\n     * @param schema The UID of the schema.\\\\n     */\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schema);\\\\n\\\\n    /**\\\\n     * @dev Emitted when an attestation has been revoked.\\\\n     *\\\\n     * @param recipient The recipient of the attestation.\\\\n     * @param attester The attesting account.\\\\n     * @param schema The UID of the schema.\\\\n     * @param uid The UID the revoked attestation.\\\\n     */\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schema);\\\\n\\\\n    /**\\\\n     * @dev Emitted when a data has been timestamped.\\\\n     *\\\\n     * @param data The data.\\\\n     * @param timestamp The timestamp.\\\\n     */\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /**\\\\n     * @dev Emitted when a data has been revoked.\\\\n     *\\\\n     * @param revoker The address of the revoker.\\\\n     * @param data The data.\\\\n     * @param timestamp The timestamp.\\\\n     */\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the global schema registry.\\\\n     *\\\\n     * @return The address of the global schema registry.\\\\n     */\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema.\\\\n     *\\\\n     * @param request The arguments of the attestation request.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * attest({\\\\n     *     schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n     *     data: {\\\\n     *         recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n     *         expirationTime: 0,\\\\n     *         revocable: true,\\\\n     *         refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n     *         data: \\\\\\\"0xF00D\\\\\\\",\\\\n     *         value: 0\\\\n     *     }\\\\n     * })\\\\n     *\\\\n     * @return The UID of the new attestation.\\\\n     */\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema via the provided EIP712 signature.\\\\n     *\\\\n     * @param delegatedRequest The arguments of the delegated attestation request.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * attestByDelegation({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     signature: {\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e'\\\\n     * })\\\\n     *\\\\n     * @return The UID of the new attestation.\\\\n     */\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Attests to multiple schemas.\\\\n     *\\\\n     * @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n     * schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiAttest([{\\\\n     *     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n     *     data: [{\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: false,\\\\n     *         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n     *         data: '0x00',\\\\n     *         value: 0\\\\n     *     }],\\\\n     * },\\\\n     * {\\\\n     *     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n     *     data: [{\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n     *         data: '0x12345678',\\\\n     *         value: 0\\\\n     *     },\\\\n     * }])\\\\n     *\\\\n     * @return The UIDs of the new attestations.\\\\n     */\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /**\\\\n     * @dev Attests to multiple schemas using via provided EIP712 signatures.\\\\n     *\\\\n     * @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n     * grouped by distinct schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiAttestByDelegation([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     {\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: false,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x00',\\\\n     *         value: 0\\\\n     *     }],\\\\n     *     signatures: [{\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     {\\\\n     *         v: 28,\\\\n     *         r: '0x487s...67bb',\\\\n     *         s: '0x12ad...2366'\\\\n     *     }],\\\\n     *     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4'\\\\n     * }])\\\\n     *\\\\n     * @return The UIDs of the new attestations.\\\\n     */\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * revoke({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n     *         value: 0\\\\n     *     }\\\\n     * })\\\\n     *\\\\n     * @param request The arguments of the revocation request.\\\\n     */\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * revokeByDelegation({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     signature: {\\\\n     *         v: 27,\\\\n     *         r: '0xb593...7142',\\\\n     *         s: '0x0f5b...2cce'\\\\n     *     },\\\\n     *     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992'\\\\n     * })\\\\n     *\\\\n     * @param delegatedRequest The arguments of the delegated revocation request.\\\\n     */\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes existing attestations to multiple schemas.\\\\n     *\\\\n     * @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n     * schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiRevoke([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n     *         value: 0\\\\n     *     }],\\\\n     * },\\\\n     * {\\\\n     *     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n     *     data: [{\\\\n     *         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n     *         value: 0\\\\n     *     },\\\\n     * }])\\\\n     */\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n     *\\\\n     * @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests should be\\\\n     * grouped by distinct schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiRevokeByDelegation([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n     *         value: 0\\\\n     *     }],\\\\n     *     signatures: [{\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     {\\\\n     *         v: 28,\\\\n     *         r: '0x487s...67bb',\\\\n     *         s: '0x12ad...2366'\\\\n     *     }],\\\\n     *     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992'\\\\n     * }])\\\\n     *\\\\n     */\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified multiple bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Revokes the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was revoked with.\\\\n     */\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Revokes the specified multiple bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was revoked with.\\\\n     */\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing attestation by UID.\\\\n     *\\\\n     * @param uid The UID of the attestation to retrieve.\\\\n     *\\\\n     * @return The attestation data members.\\\\n     */\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /**\\\\n     * @dev Checks whether an attestation exists.\\\\n     *\\\\n     * @param uid The UID of the attestation to retrieve.\\\\n     *\\\\n     * @return Whether an attestation exists.\\\\n     */\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the timestamp that the specified data was timestamped with.\\\\n     *\\\\n     * @param data The data to query.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Returns the timestamp that the specified data was timestamped with.\\\\n     *\\\\n     * @param data The data to query.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x77037a2caac190938c12fc150159abc4b59069fa4cb71a7b75f0c3d08a55a419\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title A struct representing a record for a submitted schema.\\\\n */\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/**\\\\n * @title The global schema registry interface.\\\\n */\\\\ninterface ISchemaRegistry {\\\\n    /**\\\\n     * @dev Emitted when a new schema has been registered\\\\n     *\\\\n     * @param uid The schema UID.\\\\n     * @param registerer The address of the account used to register the schema.\\\\n     */\\\\n    event Registered(bytes32 indexed uid, address registerer);\\\\n\\\\n    /**\\\\n     * @dev Submits and reserves a new schema\\\\n     *\\\\n     * @param schema The schema data schema.\\\\n     * @param resolver An optional schema resolver.\\\\n     * @param revocable Whether the schema allows revocations explicitly.\\\\n     *\\\\n     * @return The UID of the new schema.\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing schema by UID\\\\n     *\\\\n     * @param uid The UID of the schema to retrieve.\\\\n     *\\\\n     * @return The schema data members.\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef47e449dd02bd034e26b1dea505ce533906f8462fc674c938ed0e872a68d640\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Types.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n/**\\\\n * @dev A struct representing EIP712 signature data.\\\\n */\\\\nstruct EIP712Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing a single attestation.\\\\n */\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x547096b5cb7bfad9591bdc520705f8110534cd040ed0f7a0ba8d83ea4a565b45\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The interface of an optional schema resolver.\\\\n */\\\\ninterface ISchemaResolver {\\\\n    /**\\\\n     * @dev Returns whether the resolver supports ETH transfers.\\\\n     */\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation and verifies whether it's valid.\\\\n     *\\\\n     * @param attestation The new attestation.\\\\n     *\\\\n     * @return Whether the attestation is valid.\\\\n     */\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes multiple attestations and verifies whether they are valid.\\\\n     *\\\\n     * @param attestations The new attestations.\\\\n     * @param values Explicit ETH amounts which were sent with each attestation.\\\\n     *\\\\n     * @return Whether all the attestations are valid.\\\\n     */\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation revocation and verifies if it can be revoked.\\\\n     *\\\\n     * @param attestation The existing attestation to be revoked.\\\\n     *\\\\n     * @return Whether the attestation can be revoked.\\\\n     */\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes revocation of multiple attestation and verifies they can be revoked.\\\\n     *\\\\n     * @param attestations The existing attestations to be revoked.\\\\n     * @param values Explicit ETH amounts which were sent with each revocation.\\\\n     *\\\\n     * @return Whether the attestations can be revoked.\\\\n     */\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0f3a75c28cdb91fa9227a6eef183379ecea2b6bf38db52795b5c4e6af79299e8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61016034620001b657601f62004fdb38819003918201601f19168301926001600160401b0392909183851183861017620001a0578160209284926040978852833981010312620001b657516001600160a01b03811692838203620001b6578051926200006b84620001bb565b6004845260208401631817191b60e11b81526003602084516200008e81620001bb565b828152016245415360e81b81522094519020948460e052610100958087524660a052835160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f978884528683015260608201524660808201523060a082015260a0815260c081019381851090851117620001a0578385525190206080523060c052610120948552156200019157506101409182525191614e039384620001d8853960805184614892015260a0518461494d015260c05184614863015260e051846148e101525183614907015251826148be01525181818161028601528181610ab4015281816110b801528181612b5e0152818161324c01526134ca0152f35b6311a1e69760e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620001a05760405256fe61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b6080526110678261295c565b602060805101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d57600060c052611737575b5060c0515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60e0526000915b83831061113f5761112b3460e05160a05160c05161376d565b6080515260206102fb8160805101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060c05101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560e0516122bd565b528261158585602060805101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b60c052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\",\n  \"deployedBytecode\": \"0x61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b6080526110678261295c565b602060805101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d57600060c052611737575b5060c0515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60e0526000915b83831061113f5761112b3460e05160a05160c05161376d565b6080515260206102fb8160805101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060c05101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560e0516122bd565b528261158585602060805101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b60c052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"details\": \"Emitted when an attestation has been made.\",\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"details\": \"Emitted when an attestation has been revoked.\",\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"details\": \"Emitted when a data has been revoked.\",\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"details\": \"Emitted when a data has been timestamped.\",\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"details\": \"Attests to a specific schema.\",\n        \"params\": {\n          \"request\": \"The arguments of the attestation request. Example: attest({     schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",     data: {         recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",         expirationTime: 0,         revocable: true,         refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",         data: \\\"0xF00D\\\",         value: 0     } })\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation.\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": {\n        \"details\": \"Attests to a specific schema via the provided EIP712 signature.\",\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request. Example: attestByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     signature: {         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e' })\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation.\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"details\": \"Returns an existing attestation by UID.\",\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"details\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getNonce(address)\": {\n        \"details\": \"Returns the current nonce per-account.\",\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"details\": \"Returns the timestamp that the specified data was timestamped with.\",\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"details\": \"Returns the address of the global schema registry.\",\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"details\": \"Returns the timestamp that the specified data was timestamped with.\",\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"details\": \"Checks whether an attestation exists.\",\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"details\": \"Attests to multiple schemas.\",\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttest([{     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 1000     },     {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 0,         revocable: false,         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',         data: '0x00',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: true,         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',         data: '0x12345678',         value: 0     }, }])\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations.\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": {\n        \"details\": \"Attests to multiple schemas using via provided EIP712 signatures.\",\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttestByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     {         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: false,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x00',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4' }])\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations.\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"details\": \"Revokes existing attestations to multiple schemas.\",\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevoke([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',         value: 0     }, }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": {\n        \"details\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\",\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"details\": \"Revokes the specified multiple bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"details\": \"Timestamps the specified multiple bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"details\": \"Revokes an existing attestation to a specific schema. Example: revoke({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',         value: 0     } })\",\n        \"params\": {\n          \"request\": \"The arguments of the revocation request.\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": {\n        \"details\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature. Example: revokeByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',         value: 0     },     signature: {         v: 27,         r: '0xb593...7142',         s: '0x0f5b...2cce'     },     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' })\",\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request.\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"details\": \"Revokes the specified bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"details\": \"Timestamps the specified bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      }\n    },\n    \"title\": \"EAS - Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 4819,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3006,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)5497_storage)\"\n      },\n      {\n        \"astId\": 3010,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3016,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)5497_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)5497_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_struct(Attestation)5497_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 5478,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5480,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5482,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 5484,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 5486,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 5488,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5490,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 5492,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 5494,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 5496,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "deployments/mainnet/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0xA7b39296258348C78294F95B872b282326A97BDF\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x9eaa9c685585e12e62b5e323a6a29e81de392a4134cc45a543d1b824ee71d1ec\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x2bF22CAe1dc34f265cAE03F6ff419177b4f4FBb3\",\n    \"contractAddress\": \"0xA7b39296258348C78294F95B872b282326A97BDF\",\n    \"transactionIndex\": 15,\n    \"gasUsed\": \"477737\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xf78aba9bfc59ea3b77dc9458655cfaf523e78fed42e9f460c678d64413a5560a\",\n    \"transactionHash\": \"0x9eaa9c685585e12e62b5e323a6a29e81de392a4134cc45a543d1b824ee71d1ec\",\n    \"logs\": [],\n    \"blockNumber\": 16756726,\n    \"cumulativeGasUsed\": \"2318891\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f4b7f486d6c32786b7e8d2904f9f6cf8\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address)\\\":{\\\"details\\\":\\\"Emitted when a new schema has been registered\\\",\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"details\\\":\\\"Returns an existing schema by UID\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"details\\\":\\\"Submits and reserves a new schema\\\",\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}}},\\\"title\\\":\\\"The global schema registry.\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title A struct representing a record for a submitted schema.\\\\n */\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/**\\\\n * @title The global schema registry interface.\\\\n */\\\\ninterface ISchemaRegistry {\\\\n    /**\\\\n     * @dev Emitted when a new schema has been registered\\\\n     *\\\\n     * @param uid The schema UID.\\\\n     * @param registerer The address of the account used to register the schema.\\\\n     */\\\\n    event Registered(bytes32 indexed uid, address registerer);\\\\n\\\\n    /**\\\\n     * @dev Submits and reserves a new schema\\\\n     *\\\\n     * @param schema The schema data schema.\\\\n     * @param resolver An optional schema resolver.\\\\n     * @param revocable Whether the schema allows revocations explicitly.\\\\n     *\\\\n     * @return The UID of the new schema.\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing schema by UID\\\\n     *\\\\n     * @param uid The UID of the schema to retrieve.\\\\n     *\\\\n     * @return The schema data members.\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef47e449dd02bd034e26b1dea505ce533906f8462fc674c938ed0e872a68d640\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Types.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The global schema registry.\\\\n */\\\\ncontract SchemaRegistry is ISchemaRegistry {\\\\n    error AlreadyExists();\\\\n\\\\n    // The version of the contract.\\\\n    string public constant VERSION = \\\\\\\"0.26\\\\\\\";\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /**\\\\n     * @inheritdoc ISchemaRegistry\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc ISchemaRegistry\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Calculates a UID for a given schema.\\\\n     *\\\\n     * @param schemaRecord The input schema.\\\\n     *\\\\n     * @return schema UID.\\\\n     */\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x11ca856573f1b53530d27d40b0a5629a5c591957e221a1b4b8eae2b2053f168b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Types.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n/**\\\\n * @dev A struct representing EIP712 signature data.\\\\n */\\\\nstruct EIP712Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing a single attestation.\\\\n */\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x547096b5cb7bfad9591bdc520705f8110534cd040ed0f7a0ba8d83ea4a565b45\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The interface of an optional schema resolver.\\\\n */\\\\ninterface ISchemaResolver {\\\\n    /**\\\\n     * @dev Returns whether the resolver supports ETH transfers.\\\\n     */\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation and verifies whether it's valid.\\\\n     *\\\\n     * @param attestation The new attestation.\\\\n     *\\\\n     * @return Whether the attestation is valid.\\\\n     */\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes multiple attestations and verifies whether they are valid.\\\\n     *\\\\n     * @param attestations The new attestations.\\\\n     * @param values Explicit ETH amounts which were sent with each attestation.\\\\n     *\\\\n     * @return Whether all the attestations are valid.\\\\n     */\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation revocation and verifies if it can be revoked.\\\\n     *\\\\n     * @param attestation The existing attestation to be revoked.\\\\n     *\\\\n     * @return Whether the attestation can be revoked.\\\\n     */\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes revocation of multiple attestation and verifies they can be revoked.\\\\n     *\\\\n     * @param attestations The existing attestations to be revoked.\\\\n     * @param values Explicit ETH amounts which were sent with each revocation.\\\\n     *\\\\n     * @return Whether the attestations can be revoked.\\\\n     */\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0f3a75c28cdb91fa9227a6eef183379ecea2b6bf38db52795b5c4e6af79299e8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\",\n  \"deployedBytecode\": \"0x60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address)\": {\n        \"details\": \"Emitted when a new schema has been registered\",\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"details\": \"Returns an existing schema by UID\",\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"details\": \"Submits and reserves a new schema\",\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      }\n    },\n    \"title\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5366,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)5313_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)5553\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)5313_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)5313_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)5313_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 5305,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5308,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)5553\"\n          },\n          {\n            \"astId\": 5310,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 5312,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "deployments/mainnet/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/mainnet/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/mainnet/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61016034620001b657601f62004fdb38819003918201601f19168301926001600160401b0392909183851183861017620001a0578160209284926040978852833981010312620001b657516001600160a01b03811692838203620001b6578051926200006b84620001bb565b6004845260208401631817191b60e11b81526003602084516200008e81620001bb565b828152016245415360e81b81522094519020948460e052610100958087524660a052835160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f978884528683015260608201524660808201523060a082015260a0815260c081019381851090851117620001a0578385525190206080523060c052610120948552156200019157506101409182525191614e039384620001d8853960805184614892015260a0518461494d015260c05184614863015260e051846148e101525183614907015251826148be01525181818161028601528181610ab4015281816110b801528181612b5e0152818161324c01526134ca0152f35b6311a1e69760e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620001a05760405256fe61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b6080526110678261295c565b602060805101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d57600060c052611737575b5060c0515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60e0526000915b83831061113f5761112b3460e05160a05160c05161376d565b6080515260206102fb8160805101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060c05101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560e0516122bd565b528261158585602060805101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b60c052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/mainnet/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism/.chainId",
    "content": "10\n"
  },
  {
    "path": "deployments/optimism/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1690557621,\n  \"000004-name-initial-schemas\": 1690558187,\n  \"000005-eip712-proxy\": 1698793560,\n  \"000006-indexer\": 1698793569\n}"
  },
  {
    "path": "deployments/optimism/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/optimism/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xE132c2E90274B44FfD8090b58399D04ddc060AE1\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd65d44e8c3dcc7ab1e4ed16c586c16a0597f6140ee0fb249581cb6b25429bfd6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xE132c2E90274B44FfD8090b58399D04ddc060AE1\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2300182\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x0f58052acacdc576e8d54092cf840f439d8fdfe52a1c218f92ec1a09c0a3beda\",\n    \"transactionHash\": \"0xd65d44e8c3dcc7ab1e4ed16c586c16a0597f6140ee0fb249581cb6b25429bfd6\",\n    \"logs\": [],\n    \"blockNumber\": 111597391,\n    \"cumulativeGasUsed\": \"2347095\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7337,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7341,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7345,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/optimism/Indexer.json",
    "content": "{\n  \"address\": \"0x6dd0CB3C3711c8B5d03b3790e5339Bbc2Bbcf934\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x58d6569b3f102a6ab8fcffd7e0f12b1be0c07ff5f2e2a33a9ce2f82dc12b1d93\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x6dd0CB3C3711c8B5d03b3790e5339Bbc2Bbcf934\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"980549\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x28a75d6dc44a1cd89086886aa89d7a8df8a75b3bf3d0df0db3b70258c469761c\",\n    \"transactionHash\": \"0x58d6569b3f102a6ab8fcffd7e0f12b1be0c07ff5f2e2a33a9ce2f82dc12b1d93\",\n    \"logs\": [],\n    \"blockNumber\": 111597395,\n    \"cumulativeGasUsed\": \"1027462\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 2, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schema) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schema) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(_schemaAttesterRecipientAttestations[schema][attester][recipient], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schema][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schema) external view returns (uint256) {\\\\n        return _schemaAttestations[schema].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schema = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schema].push(attestationUID);\\\\n        _receivedAttestations[recipient][schema].push(attestationUID);\\\\n        _sentAttestations[attester][schema].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schema][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c0f19a79712ee67248f0f0d3f343daf4281da31ffa6319c67c8a7af38a660b0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6193,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6200,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6209,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6214,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/optimism/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/optimism/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schema: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/.chainId",
    "content": "420"
  },
  {
    "path": "deployments/optimism-goerli/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1690031840,\n  \"000004-name-initial-schemas\": 1690109514,\n  \"000005-eip712-proxy\": 1698798073,\n  \"000006-indexer\": 1698797914,\n  \"000100-test-seed\": 1690109807\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x88D1bd62AC014424b987CE5ABf311BD7749e426B\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x0c1b78ac09ed8ecd2a09cdd2b91b143eecb85a230f45cf3b264abcde1b47ee89\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x88D1bd62AC014424b987CE5ABf311BD7749e426B\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2300182\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x6901079ea083ca879b34056ec302587010cbb367a4cbb4f9fea178c3a6472174\",\n    \"transactionHash\": \"0x0c1b78ac09ed8ecd2a09cdd2b91b143eecb85a230f45cf3b264abcde1b47ee89\",\n    \"logs\": [],\n    \"blockNumber\": 16684999,\n    \"cumulativeGasUsed\": \"2347047\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7337,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7341,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7345,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/optimism-goerli/Indexer.json",
    "content": "{\n  \"address\": \"0xa42428D1bf904d762adD02b27ADac26d53643782\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x1fc1dfd0de62172a21401d6e392a39a22f2c0c89c22b6cab5d0efe32b206ced0\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xa42428D1bf904d762adD02b27ADac26d53643782\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"980549\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xdfa41b5d2ccf5495ad7e3517a054dc7a2506fec1555c2e0683322023d1810e2c\",\n    \"transactionHash\": \"0x1fc1dfd0de62172a21401d6e392a39a22f2c0c89c22b6cab5d0efe32b206ced0\",\n    \"logs\": [],\n    \"blockNumber\": 16684920,\n    \"cumulativeGasUsed\": \"1027414\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 2, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schema) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schema) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(_schemaAttesterRecipientAttestations[schema][attester][recipient], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schema][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schema) external view returns (uint256) {\\\\n        return _schemaAttestations[schema].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schema = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schema].push(attestationUID);\\\\n        _receivedAttestations[recipient][schema].push(attestationUID);\\\\n        _sentAttestations[attester][schema].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schema][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c0f19a79712ee67248f0f0d3f343daf4281da31ffa6319c67c8a7af38a660b0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6193,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6200,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6209,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6214,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/optimism-goerli/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getName()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getName(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getName(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getName(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getName(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getName(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schema: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x610160346200030457601f19906001600160401b0390601f62004c8b38819003918201851683019184831184841017620003095780849260409485528339602093849181010312620003045751916001600160a01b0383168084036200030457818351966200006e886200031f565b60038852818801966245415360e81b885285516200008c816200031f565b6004958187809352019863302e323760e01b8a528a5190209820988860e05261010099808b524660a0528751858101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9b8c84528a83015260608201524660808201523060a082015260a0815260c0810181811085821117620002ef5789525190206080523060c0526101209889528051918211620002da576000938454916001928381811c91168015620002cf575b83821014620002bc57601f811162000271575b5081601f85116001146200020b5750839450908392918694620001ff575b50501b916000199060031b1c19161790555b15620001f15750610140918252519161494f93846200033c8539608051846143de015260a05184614499015260c051846143af015260e0518461442d015251836144530152518261440a0152518181816102a901528181611e660152818161269001528181612d9c015261301a0152f35b90516311a1e69760e01b8152fd5b0151925038806200016e565b9294849081168780528488209488905b888383106200025657505050106200023c575b505050811b01905562000180565b015160001960f88460031b161c191690553880806200022e565b8587015188559096019594850194879350908101906200021b565b868052828720601f860160051c810191848710620002b1575b601f0160051c019084905b828110620002a557505062000150565b88815501849062000295565b90915081906200028a565b634e487b7160e01b875260228952602487fd5b90607f16906200013d565b604186634e487b7160e01b6000525260246000fd5b604189634e487b7160e01b6000525260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117620003095760405256fe61016060406101405280610140515260048036101561001d57600080fd5b600091823560e01c90816312b11a171461118d5750806313893f611461110557806317d7de7c14610fe25780632d0335ab14610f7a57806344adc90e14610e715780634692626714610e125780634cb7e9e514610d095780634d00307014610cc0578063831e05a114610a71578063a3112a6414610a07578063b469318d14610987578063b83010d31461092c578063cf190f34146108e2578063d45c44351461088c578063e13458fc14610790578063e30bb56314610739578063e45d03f9146104b1578063e57a6b1b1461039b578063e71ff36514610310578063ed24911d146102cd578063f10b5cc81461025c578063f17325e7146101ae5763ffa1ad741461012857600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5761014051516101a6916101688261141f565b81527f302e3237000000000000000000000000000000000000000000000000000000006020820152610140515191829160208352602083019061123e565b0390f35b5080fd5b50907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc906020823601126102595782359267ffffffffffffffff84116101aa578301916101405190843603011261025957602061024e8161024786866102296102156114eb565b92610224602436920184611553565b6115d6565b61023283611586565b5261023c82611586565b503491339135611df1565b0151611586565b516101405151908152f35b80fd5b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610140515173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610306614398565b6101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff918282116103975761035f913691016111e5565b90914216925b818110610379576020846101405151908152f35b806103918561038b6001948688611a39565b356141c0565b01610365565b8380fd5b5060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101405151906103d58261139c565b358082526103e236611981565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126104ad57610140515161041f81611403565b60643560ff811681036104a9578152608435602082015260a435610140518201526101405183015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361039757610479838260606104a596015261487c565b610481611932565b61048a36611981565b61049382611586565b5261049d81611586565b503492612d4f565b5080f35b8480fd5b8280fd5b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5767ffffffffffffffff82358181116104a95784926104ff8592369084016111e5565b91903493865b848110610510578780f35b6105208186859a9798999a61189e565b906080823603126107315761014051519761053a8961139c565b82358952858301358a811161073557830196601f973689820112156101aa5761056990369089813591016119c7565b94878b01958652610140518501358c81116104ad5785019836908a0112156101aa57883596610597886114d3565b996105a761014051519b8c611458565b888b52898b018a6060809b0283010191368311610731578b808c9201925b84841061071957505090506105e591508d6101405101978c8952016112a4565b96888d0197885251998a51801591821561070d575b50506106e257825b8a51811015610673578061066d8c8f8b8b8f926106448761063c60019a73ffffffffffffffffffffffffffffffffffffffff9451986115c2565b5193516115c2565b51925116926101405151946106588661139c565b8552840152610140518301528c82015261487c565b01610602565b5099986106d6949897506001955083906106d0939d97929c519073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d018c1494511691612fcc565b90611862565b91969195929301610505565b5061014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508e806105fa565b6107233685611698565b8152019101908b8b916105c5565b8580fd5b8780fd5b5090346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061078483356000526002602052604060002054151590565b61014051519015158152f35b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916020833601126102595767ffffffffffffffff9282358481116104ad5760c08185019282360301126104ad576101405151946107ee8661139c565b82359485875260248301948535928311610259575060209661086b6102479561085860a461024e9a9761082b8d9b986108849836918401016115d6565b8b87015261083c3660448301611698565b61014051870152019361084e856112a4565b60608201526144bf565b6102246108636114eb565b953692611553565b61087484611586565b5261087e83611586565b506116d6565b903492611df1565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff913581526003835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff421680923533614266565b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061014051517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b50346101aa57610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff6109e3611281565b16825283526101405181206024358252835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a691610a5b91610a47611a49565b503581526002602052610140519020611ae7565b6101405151918291602083526020830190611300565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff81116104ad57610abb8391369084016111e5565b9092610ac6826116f7565b9383346101205280935b808510610af2576101a6610ae4878961432b565b6101405151918291826112c5565b9091929394610b0286838661189e565b610b0f602082018261179e565b80929192158015610ca6575b610c7b578560608301928035915b838110610bbb57505092602092610b829260019695610b7c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494610b7461012051956116d6565b9336916117f2565b9061261e565b610b90815161012051611862565b61012052018051610ba1898b6115c2565b52610bac888a6115c2565b50515101950193929190610ad0565b610bca8160051b870187611553565b610bd9610140518401846118de565b831015610c4f576001929173ffffffffffffffffffffffffffffffffffffffff610c4992610c37610c098b6116d6565b91610c26610140515195610c1c8761139c565b8b875236906115d6565b602086015236906060880201611698565b610140518401521660608201526144bf565b01610b29565b60248b60328f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8761014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b50610cb6610140518301836118de565b9050811415610b1b565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff42168092356141c0565b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad57813567ffffffffffffffff928382116104a957610d54913691016111e5565b8493919290345b818610610d66578680f35b610d7186838761175e565b838101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215610e0e57810191823592868411610e0a578501928060061b36038413610e0a57600193826106d092610e0295610dfb8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494339336916119c7565b9035612fcc565b950194610d5b565b8980fd5b8880fd5b5060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576104a590610e49611932565b90610e5336611981565b610e5c83611586565b52610e6682611586565b503491339135612d4f565b50602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5780359067ffffffffffffffff821161039757610ebe9084923691016111e5565b90610ec8826116f7565b93833490937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610610f06576101a6610ae4888a61432b565b90919293949560019085610f51610f488a8888610f24838a8f61175e565b610f41610f338883018361179e565b9390951494339336916117f2565b903561261e565b96875190611862565b95018051610f5f8a8c6115c2565b52610f6a898b6115c2565b5051510196019493929190610ef2565b82346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595760209073ffffffffffffffffffffffffffffffffffffffff610fca611281565b16815260018252610140519020546101405151908152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595761014051519080805461102381611a94565b808552916001918083169081156110bd5750600114611063575b6101a68561104d81870382611458565b610140515191829160208352602083019061123e565b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106110a557505050810160200161104d826101a661103d565b8054602085870181019190915290930192810161108a565b8695506101a69693506020925061104d9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929361103d565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff9182821161039757611154913691016111e5565b90914216925b81811061116e576020846101405151908152f35b80611187856111806001948688611a39565b3533614266565b0161115a565b8390346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156112165782359167ffffffffffffffff8311611216576020808501948460051b01011161121657565b600080fd5b60005b83811061122e5750506000910152565b818101518382015260200161121e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361127a8151809281875287808801910161121b565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b6020908160408183019282815285518094520193019160005b8281106112ec575050505090565b8351855293810193928101926001016112de565b9061139991805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e08301526101008082015115159083015261012080910151916101408092820152019061123e565b90565b6080810190811067ffffffffffffffff8211176113b857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176113b857604052565b6060810190811067ffffffffffffffff8211176113b857604052565b6040810190811067ffffffffffffffff8211176113b857604052565b610140810190811067ffffffffffffffff8211176113b857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b857604052565b67ffffffffffffffff81116113b857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116113b85760051b60200190565b6040908151916114fa8361141f565b60018352829160005b60208082101561154b5783516020929161151c826113e7565b6000825260008183015260008683015260606000818401526080830152600060a0830152828801015201611503565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215611216570190565b8051156115935760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156115935760209160051b010190565b91909160c08184031261121657604051906115f0826113e7565b81936115fb826112a4565b835260209167ffffffffffffffff8184013581811681036112165784860152604082013580151581036112165760408601526060820135606086015260808201359081116112165781019180601f840112156112165782359261165d84611499565b9161166b6040519384611458565b84835285858301011161121657848460a09695879660009401838601378301015260808501520135910152565b9190826060910312611216576040516116b081611403565b8092803560ff811681036112165760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036112165790565b90611701826114d3565b61170e6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061173c82946114d3565b019060005b82811061174d57505050565b806060602080938501015201611741565b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff821161121657602001918160051b3603831361121657565b929190926117ff846114d3565b9161180d6040519384611458565b829480845260208094019060051b8301928284116112165780915b84831061183757505050505050565b823567ffffffffffffffff811161121657869161185786849386016115d6565b815201920191611828565b9190820391821161186f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff82116112165760200191606082023603831361121657565b6040908151916119418361141f565b600183528291600091825b602080821015611978578251602092916119658261141f565b868252868183015282890101520161194c565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261121657604051906119b88261141f565b60243582526044356020830152565b9291926119d3826114d3565b6040926119e284519283611458565b819581835260208093019160061b84019381851161121657915b848310611a0b57505050505050565b8583830312611216578386918251611a228161141f565b8535815282860135838201528152019201916119fc565b91908110156115935760051b0190565b60405190611a568261143b565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c92168015611add575b6020831014611aae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611aa3565b9060405191611af58361143b565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c1615156101008501520190604051938492600092815491611b9283611a94565b80875292828116908115611c075750600114611bc1575b505050506101209291611bbd910384611458565b0152565b60009081528381209695945091905b818310611bef57509394509192509082010181611bbd61012038611ba9565b86548884018501529586019587945091830191611bd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b830101905081611bbd61012038611ba9565b60405190611c548261141f565b6060602083600081520152565b90611c6b826114d3565b611c786040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ca682946114d3565b0190602036910137565b5190811515820361121657565b906020808383031261121657825167ffffffffffffffff938482116112165701926080848403126112165760405193611cf58561139c565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036112165783860152611d2a60408201611cb0565b60408601526060810151918211611216570182601f8201121561121657805190611d5382611499565b93611d616040519586611458565b8285528383830101116112165782611d7c938501910161121b565b606082015290565b90611d8e826114d3565b611d9b6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611dc982946114d3565b019060005b828110611dda57505050565b602090611de5611a49565b82828501015201611dce565b9192608052611dfe611c47565b50805190611e0a611c47565b60a052611e1682611c61565b602060a05101526040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815283600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015612612576000610100526125ec575b506101005151156125c2579091611eaf83611d84565b60e052611ebb83611c61565b60c0526000915b838310611eed575050505050611ee360805160c05160e051610100516132bc565b60a0515260a05190565b611efd83829793949596976115c2565b519167ffffffffffffffff60208401511680151590816125ad575b506125835760406101005101511580612576575b61254c5760608301519567ffffffffffffffff6020850151169673ffffffffffffffffffffffffffffffffffffffff85511660408601511515906080870151926040519a611f798c61143b565b60008c528960208d015267ffffffffffffffff421660408d015260608c0152600060808c015260a08b015260c08a015273ffffffffffffffffffffffffffffffffffffffff8a1660e08a015261010089015261012088015260005b602088015160c08901516120dd609d60e08c015160408d01518d60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182611458565b51902080600052600260205260406000205415612103575060010163ffffffff16611fd4565b905097969293909495919780845280600052600260205260406000209184518355602085015160018401556121df6002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b85789946122c16006840154611a94565b601f81116124f1575b50602090601f8311600114612424576006929160009183612419575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060810151806123c9575b5073ffffffffffffffffffffffffffffffffffffffff9060019561234a8660e0516115c2565b526123578560e0516115c2565b5060a08101516123698660c0516115c2565b528261237b86602060a05101516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8b1693a401919290611ec2565b6123e29193506000526002602052604060002054151590565b156123ef57869138612324565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806122e6565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106124d65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061249f575b505050811b01910155612319565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612491565b8183015184558d985060019093019260209283019201612435565b90919293949550600684016000526020600020601f840160051c810160208510612545575b908c979695949392915b601f830160051c820181106125365750506122ca565b600081558d9850600101612520565b5080612516565b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408301511515611f2c565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff4216101538611f18565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b612608903d806000833e6126008183611458565b810190611cbd565b6101005238611e99565b6040513d6000823e3d90fd5b929094939161262b611c47565b50855193612637611c47565b9461264181611c61565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561261257600092612d32575b508151156125c257929790916126d684611d84565b986126e085611c61565b946000935b818510612702575050505050956126fd949596613520565b815290565b919593989496999092976127168a846115c2565b519a67ffffffffffffffff60208d0151168015159081612d1d575b506125835760408901511580612d10575b61254c57899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f906127938261143b565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b6128be609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b519020806000526002602052604060002054156128e4575060010163ffffffff166127ed565b90509d979b9199929a949d9c909698939c80845280600052600260205260406000209184518355602085015160018401556129c66002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b8578894612aa86006840154611a94565b601f8111612cb5575b50602090601f8311600114612be8576006929160009183612bdd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180612bb0575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b46848660019e612b4083612b5e9a6115c2565b526115c2565b50612b568460a0890151926115c2565b5201516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a6126e5565b92505050612bcd9193506000526002602052604060002054151590565b156123ef5785918d8b8b38612b0e565b015190503880612acd565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085168110612c9a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610612c63575b505050811b01910155612b00565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612c55565b8183015184558c985060019093019260209283019201612bf9565b90919293949550600684016000526020600020601f840160051c810160208510612d09575b908b979695949392915b601f830160051c82018110612cfa575050612ab1565b600081558c9850600101612ce4565b5080612cda565b5060408c01511515612742565b905067ffffffffffffffff4216101538612731565b612d489192503d806000833e6126008183611458565b90386126c1565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561261257600091612fb1575b508051156125c2578251612de081611d84565b92612dea82611c61565b9460005b838110612e045750505050611399949550613701565b612e0e81836115c2565b5190815160005260028060205260406000208054156123ef57856001820154036125c2578c73ffffffffffffffffffffffffffffffffffffffff6005830154911673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8282015460801c16612f5d5790810180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c9190612ee282611ae7565b612eec858c6115c2565b52612ef7848b6115c2565b506020810151612f07858d6115c2565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a401612dee565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b612fc691503d806000833e6126008183611458565b38612dcd565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612612576000916131ed575b508051156125c257865161305e81611d84565b9261306882611c61565b9460005b8381106130825750505050611399959650613900565b61308c818c6115c2565b519081516000526002918260205260406000208054156123ef57846001820154036125c257600581015473ffffffffffffffffffffffffffffffffffffffff871673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8482015460801c16612f5d5792830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261315d81611ae7565b613167848b6115c2565b52613172838a6115c2565b506020820151613182848c6115c2565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161306c565b61320291503d806000833e6126008183611458565b3861304b565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061327157505050508281830391015281808451928381520193019160005b82811061325d575050505090565b83518552938101939281019260010161324f565b909192959485806132ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51611300565b979801949391909101910161322e565b9092918351936001908186146134ff5773ffffffffffffffffffffffffffffffffffffffff602080950151169182156134cf579560009687915b8083106133c1575050509183929161333f9492876040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af19081156126125760009161338d575b509050156133635761139990614091565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d83116133ba575b6133a18183611458565b8101031261025957506133b390611cb0565b8038613352565b503d613397565b909197966133cf89876115c2565b5180151580613449575b61341f578181116133f5578084920398019801909190916132f6565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613490575b50156133d9565b908982813d83116134be575b6134a68183611458565b8101031261025957506134b890611cb0565b38613489565b503d61349c565b513d6000823e3d90fd5b9594505050905060005b8281106134e95750505050600090565b6134f381836115c2565b5161341f5783016134d9565b6113999550613519915061351290611586565b5191611586565b5191613ad8565b9093918451946001908187146136e45773ffffffffffffffffffffffffffffffffffffffff602080950151169182156136b3579660009788915b80831061360357505050918392916135a39492886040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916135cf575b50905015613363576135c6575090565b61139990614091565b82813d83116135fc575b6135e38183611458565b8101031261025957506135f590611cb0565b80386135b6565b503d6135d9565b909198976136118a876115c2565b5180151580613637575b61341f578181116133f55780849203990199019091909161355a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c5575060009161367e575b501561361b565b908982813d83116136ac575b6136948183611458565b8101031261025957506136a690611cb0565b38613677565b503d61368a565b969550505091505060005b8281106136ce5750505050600090565b6136d881836115c2565b5161341f5783016136be565b61139996506136fa915061351290959495611586565b5191613c5f565b9092918351936001908186146138e65773ffffffffffffffffffffffffffffffffffffffff602080950151169182156138b6579560009687915b80831061380657505050918392916137849492876040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916137d2575b509050156137a85761139990614091565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d83116137ff575b6137e68183611458565b8101031261025957506137f890611cb0565b8038613797565b503d6137dc565b9091979661381489876115c2565b518015158061383a575b61341f578181116133f55780849203980198019091909161373b565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613881575b501561381e565b908982813d83116138af575b6138978183611458565b8101031261025957506138a990611cb0565b3861387a565b503d61388d565b9594505050905060005b8281106138d05750505050600090565b6138da81836115c2565b5161341f5783016138c0565b61139995506138f9915061351290611586565b5191613dc7565b909391845194600190818714613abb5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613a8a579660009788915b8083106139da57505050918392916139839492886040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916139a6575b509050156137a8576135c6575090565b82813d83116139d3575b6139ba8183611458565b8101031261025957506139cc90611cb0565b8038613996565b503d6139b0565b909198976139e88a876115c2565b5180151580613a0e575b61341f578181116133f55780849203990199019091909161393a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613a55575b50156139f2565b908982813d8311613a83575b613a6b8183611458565b810103126102595750613a7d90611cb0565b38613a4e565b503d613a61565b969550505091505060005b828110613aa55750505050600090565b613aaf81836115c2565b5161341f578301613a95565b6113999650613ad1915061351290959495611586565b5191613f41565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613bd8575b61341f578385116133f557613b54829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613ba4575b50905015613b7a57816113999103614091565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613bd1575b613bb88183611458565b810103126102595750613bca90611cb0565b8038613b67565b503d613bae565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613c1d575b5015613b06565b908382813d8311613c4b575b613c338183611458565b810103126102595750613c4590611cb0565b38613c16565b503d613c29565b5050505061341f57600090565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580613d3f575b61341f578486116133f557613cdb829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613d0b575b50905015613b7a578290613d0157505090565b6113999103614091565b82813d8311613d38575b613d1f8183611458565b810103126102595750613d3190611cb0565b8038613cee565b503d613d15565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613d84575b5015613c8d565b908382813d8311613db2575b613d9a8183611458565b810103126102595750613dac90611cb0565b38613d7d565b503d613d90565b505050505061341f57600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613ec7575b61341f578385116133f557613e43829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613e93575b50905015613e6957816113999103614091565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613ec0575b613ea78183611458565b810103126102595750613eb990611cb0565b8038613e56565b503d613e9d565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613f0c575b5015613df5565b908382813d8311613f3a575b613f228183611458565b810103126102595750613f3490611cb0565b38613f05565b503d613f18565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580614017575b61341f578486116133f557613fbd829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613fe3575b50905015613e69578290613d0157505090565b82813d8311614010575b613ff78183611458565b81010312610259575061400990611cb0565b8038613fd0565b503d613fed565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa9081156126125760009161405c575b5015613f6f565b908382813d831161408a575b6140728183611458565b81010312610259575061408490611cb0565b38614055565b503d614068565b806140995750565b80471061416257600080808093335af13d1561415d573d6140b981611499565b906140c76040519283611458565b8152600060203d92013e5b156140d957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b6140d2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6000818152600360205267ffffffffffffffff908160408220541661423c577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600360205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600460205260408120908381528160205267ffffffffffffffff80604083205416614301577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b9061433590611c61565b60009283925b8051841015614390579361434f84866115c2565b519160005b835181101561437f5761436781856115c2565b5161437284876115c2565b5260019283019201614354565b50909460019094019390915061433b565b509250905090565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480614496575b15614400577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152614490816113e7565b51902090565b507f000000000000000000000000000000000000000000000000000000000000000046146143d7565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260018252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e085015261010090818501528352610120830196838810908811176113b8576145aa86956145be946145c6998b52519020614830565b918860ff8351169183015192015192614794565b9490946145fb565b51169116036145d25750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614765578061460c5750565b600181036146725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036146d85760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146146e157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116148245791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa1561481757815173ffffffffffffffffffffffffffffffffffffffff811615614811579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614838614398565b906040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526144908161139c565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600160205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff8711176113b85761492d85946145be936145c6988a52519020614830565b9060ff8151168860208301519201519261479456fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323700000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-goerli/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/.chainId",
    "content": "11155420\n"
  },
  {
    "path": "deployments/optimism-sepolia/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1701559674,\n  \"000004-name-initial-schemas\": 1701559939,\n  \"000005-eip712-proxy\": 1701559947,\n  \"000006-indexer\": 1701559957,\n  \"000100-test-seed\": 1701560054\n}"
  },
  {
    "path": "deployments/optimism-sepolia/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x37AC6006646f2e687B7fB379F549Dc7634dF5b84\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x42d02d1f9010921b72cb1e7e0773ae986c428eddc91bd51fcc66765c1de40197\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x37AC6006646f2e687B7fB379F549Dc7634dF5b84\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2309831\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd96e6b29035cc2882980690ea822a4daeccc8dcfd7d1de1e867dd89e232cae3b\",\n    \"transactionHash\": \"0x42d02d1f9010921b72cb1e7e0773ae986c428eddc91bd51fcc66765c1de40197\",\n    \"logs\": [],\n    \"blockNumber\": 4878702,\n    \"cumulativeGasUsed\": \"2356720\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7363,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7367,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7371,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/optimism-sepolia/Indexer.json",
    "content": "{\n  \"address\": \"0x97e6822A36E38D4d93C0c810CC2be1C6Fd492b64\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x19bbb0f9c09e642cf8d81a31e2212bee6250955b7d2b0837b31ccd1014d42896\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x97e6822A36E38D4d93C0c810CC2be1C6Fd492b64\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"980835\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x4d3553a4bcefd85729c2d38653d9321df57e28fb7ddcef05a410f506704d515d\",\n    \"transactionHash\": \"0x19bbb0f9c09e642cf8d81a31e2212bee6250955b7d2b0837b31ccd1014d42896\",\n    \"logs\": [],\n    \"blockNumber\": 4878706,\n    \"cumulativeGasUsed\": \"1027724\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6211,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6227,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6232,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6236,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/optimism-sepolia/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getName()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getName(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getName(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getName(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getName(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getName(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x610160346200030457601f19906001600160401b0390601f62004c8b38819003918201851683019184831184841017620003095780849260409485528339602093849181010312620003045751916001600160a01b0383168084036200030457818351966200006e886200031f565b60038852818801966245415360e81b885285516200008c816200031f565b6004958187809352019863302e323760e01b8a528a5190209820988860e05261010099808b524660a0528751858101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9b8c84528a83015260608201524660808201523060a082015260a0815260c0810181811085821117620002ef5789525190206080523060c0526101209889528051918211620002da576000938454916001928381811c91168015620002cf575b83821014620002bc57601f811162000271575b5081601f85116001146200020b5750839450908392918694620001ff575b50501b916000199060031b1c19161790555b15620001f15750610140918252519161494f93846200033c8539608051846143de015260a05184614499015260c051846143af015260e0518461442d015251836144530152518261440a0152518181816102a901528181611e660152818161269001528181612d9c015261301a0152f35b90516311a1e69760e01b8152fd5b0151925038806200016e565b9294849081168780528488209488905b888383106200025657505050106200023c575b505050811b01905562000180565b015160001960f88460031b161c191690553880806200022e565b8587015188559096019594850194879350908101906200021b565b868052828720601f860160051c810191848710620002b1575b601f0160051c019084905b828110620002a557505062000150565b88815501849062000295565b90915081906200028a565b634e487b7160e01b875260228952602487fd5b90607f16906200013d565b604186634e487b7160e01b6000525260246000fd5b604189634e487b7160e01b6000525260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117620003095760405256fe61016060406101405280610140515260048036101561001d57600080fd5b600091823560e01c90816312b11a171461118d5750806313893f611461110557806317d7de7c14610fe25780632d0335ab14610f7a57806344adc90e14610e715780634692626714610e125780634cb7e9e514610d095780634d00307014610cc0578063831e05a114610a71578063a3112a6414610a07578063b469318d14610987578063b83010d31461092c578063cf190f34146108e2578063d45c44351461088c578063e13458fc14610790578063e30bb56314610739578063e45d03f9146104b1578063e57a6b1b1461039b578063e71ff36514610310578063ed24911d146102cd578063f10b5cc81461025c578063f17325e7146101ae5763ffa1ad741461012857600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5761014051516101a6916101688261141f565b81527f302e3237000000000000000000000000000000000000000000000000000000006020820152610140515191829160208352602083019061123e565b0390f35b5080fd5b50907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc906020823601126102595782359267ffffffffffffffff84116101aa578301916101405190843603011261025957602061024e8161024786866102296102156114eb565b92610224602436920184611553565b6115d6565b61023283611586565b5261023c82611586565b503491339135611df1565b0151611586565b516101405151908152f35b80fd5b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610140515173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610306614398565b6101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff918282116103975761035f913691016111e5565b90914216925b818110610379576020846101405151908152f35b806103918561038b6001948688611a39565b356141c0565b01610365565b8380fd5b5060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101405151906103d58261139c565b358082526103e236611981565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126104ad57610140515161041f81611403565b60643560ff811681036104a9578152608435602082015260a435610140518201526101405183015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361039757610479838260606104a596015261487c565b610481611932565b61048a36611981565b61049382611586565b5261049d81611586565b503492612d4f565b5080f35b8480fd5b8280fd5b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5767ffffffffffffffff82358181116104a95784926104ff8592369084016111e5565b91903493865b848110610510578780f35b6105208186859a9798999a61189e565b906080823603126107315761014051519761053a8961139c565b82358952858301358a811161073557830196601f973689820112156101aa5761056990369089813591016119c7565b94878b01958652610140518501358c81116104ad5785019836908a0112156101aa57883596610597886114d3565b996105a761014051519b8c611458565b888b52898b018a6060809b0283010191368311610731578b808c9201925b84841061071957505090506105e591508d6101405101978c8952016112a4565b96888d0197885251998a51801591821561070d575b50506106e257825b8a51811015610673578061066d8c8f8b8b8f926106448761063c60019a73ffffffffffffffffffffffffffffffffffffffff9451986115c2565b5193516115c2565b51925116926101405151946106588661139c565b8552840152610140518301528c82015261487c565b01610602565b5099986106d6949897506001955083906106d0939d97929c519073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d018c1494511691612fcc565b90611862565b91969195929301610505565b5061014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508e806105fa565b6107233685611698565b8152019101908b8b916105c5565b8580fd5b8780fd5b5090346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061078483356000526002602052604060002054151590565b61014051519015158152f35b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916020833601126102595767ffffffffffffffff9282358481116104ad5760c08185019282360301126104ad576101405151946107ee8661139c565b82359485875260248301948535928311610259575060209661086b6102479561085860a461024e9a9761082b8d9b986108849836918401016115d6565b8b87015261083c3660448301611698565b61014051870152019361084e856112a4565b60608201526144bf565b6102246108636114eb565b953692611553565b61087484611586565b5261087e83611586565b506116d6565b903492611df1565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff913581526003835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff421680923533614266565b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061014051517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b50346101aa57610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff6109e3611281565b16825283526101405181206024358252835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a691610a5b91610a47611a49565b503581526002602052610140519020611ae7565b6101405151918291602083526020830190611300565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff81116104ad57610abb8391369084016111e5565b9092610ac6826116f7565b9383346101205280935b808510610af2576101a6610ae4878961432b565b6101405151918291826112c5565b9091929394610b0286838661189e565b610b0f602082018261179e565b80929192158015610ca6575b610c7b578560608301928035915b838110610bbb57505092602092610b829260019695610b7c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494610b7461012051956116d6565b9336916117f2565b9061261e565b610b90815161012051611862565b61012052018051610ba1898b6115c2565b52610bac888a6115c2565b50515101950193929190610ad0565b610bca8160051b870187611553565b610bd9610140518401846118de565b831015610c4f576001929173ffffffffffffffffffffffffffffffffffffffff610c4992610c37610c098b6116d6565b91610c26610140515195610c1c8761139c565b8b875236906115d6565b602086015236906060880201611698565b610140518401521660608201526144bf565b01610b29565b60248b60328f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8761014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b50610cb6610140518301836118de565b9050811415610b1b565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff42168092356141c0565b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad57813567ffffffffffffffff928382116104a957610d54913691016111e5565b8493919290345b818610610d66578680f35b610d7186838761175e565b838101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215610e0e57810191823592868411610e0a578501928060061b36038413610e0a57600193826106d092610e0295610dfb8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494339336916119c7565b9035612fcc565b950194610d5b565b8980fd5b8880fd5b5060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576104a590610e49611932565b90610e5336611981565b610e5c83611586565b52610e6682611586565b503491339135612d4f565b50602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5780359067ffffffffffffffff821161039757610ebe9084923691016111e5565b90610ec8826116f7565b93833490937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610610f06576101a6610ae4888a61432b565b90919293949560019085610f51610f488a8888610f24838a8f61175e565b610f41610f338883018361179e565b9390951494339336916117f2565b903561261e565b96875190611862565b95018051610f5f8a8c6115c2565b52610f6a898b6115c2565b5051510196019493929190610ef2565b82346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595760209073ffffffffffffffffffffffffffffffffffffffff610fca611281565b16815260018252610140519020546101405151908152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595761014051519080805461102381611a94565b808552916001918083169081156110bd5750600114611063575b6101a68561104d81870382611458565b610140515191829160208352602083019061123e565b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106110a557505050810160200161104d826101a661103d565b8054602085870181019190915290930192810161108a565b8695506101a69693506020925061104d9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929361103d565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff9182821161039757611154913691016111e5565b90914216925b81811061116e576020846101405151908152f35b80611187856111806001948688611a39565b3533614266565b0161115a565b8390346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156112165782359167ffffffffffffffff8311611216576020808501948460051b01011161121657565b600080fd5b60005b83811061122e5750506000910152565b818101518382015260200161121e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361127a8151809281875287808801910161121b565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b6020908160408183019282815285518094520193019160005b8281106112ec575050505090565b8351855293810193928101926001016112de565b9061139991805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e08301526101008082015115159083015261012080910151916101408092820152019061123e565b90565b6080810190811067ffffffffffffffff8211176113b857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176113b857604052565b6060810190811067ffffffffffffffff8211176113b857604052565b6040810190811067ffffffffffffffff8211176113b857604052565b610140810190811067ffffffffffffffff8211176113b857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b857604052565b67ffffffffffffffff81116113b857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116113b85760051b60200190565b6040908151916114fa8361141f565b60018352829160005b60208082101561154b5783516020929161151c826113e7565b6000825260008183015260008683015260606000818401526080830152600060a0830152828801015201611503565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215611216570190565b8051156115935760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156115935760209160051b010190565b91909160c08184031261121657604051906115f0826113e7565b81936115fb826112a4565b835260209167ffffffffffffffff8184013581811681036112165784860152604082013580151581036112165760408601526060820135606086015260808201359081116112165781019180601f840112156112165782359261165d84611499565b9161166b6040519384611458565b84835285858301011161121657848460a09695879660009401838601378301015260808501520135910152565b9190826060910312611216576040516116b081611403565b8092803560ff811681036112165760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036112165790565b90611701826114d3565b61170e6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061173c82946114d3565b019060005b82811061174d57505050565b806060602080938501015201611741565b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff821161121657602001918160051b3603831361121657565b929190926117ff846114d3565b9161180d6040519384611458565b829480845260208094019060051b8301928284116112165780915b84831061183757505050505050565b823567ffffffffffffffff811161121657869161185786849386016115d6565b815201920191611828565b9190820391821161186f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff82116112165760200191606082023603831361121657565b6040908151916119418361141f565b600183528291600091825b602080821015611978578251602092916119658261141f565b868252868183015282890101520161194c565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261121657604051906119b88261141f565b60243582526044356020830152565b9291926119d3826114d3565b6040926119e284519283611458565b819581835260208093019160061b84019381851161121657915b848310611a0b57505050505050565b8583830312611216578386918251611a228161141f565b8535815282860135838201528152019201916119fc565b91908110156115935760051b0190565b60405190611a568261143b565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c92168015611add575b6020831014611aae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611aa3565b9060405191611af58361143b565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c1615156101008501520190604051938492600092815491611b9283611a94565b80875292828116908115611c075750600114611bc1575b505050506101209291611bbd910384611458565b0152565b60009081528381209695945091905b818310611bef57509394509192509082010181611bbd61012038611ba9565b86548884018501529586019587945091830191611bd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b830101905081611bbd61012038611ba9565b60405190611c548261141f565b6060602083600081520152565b90611c6b826114d3565b611c786040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ca682946114d3565b0190602036910137565b5190811515820361121657565b906020808383031261121657825167ffffffffffffffff938482116112165701926080848403126112165760405193611cf58561139c565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036112165783860152611d2a60408201611cb0565b60408601526060810151918211611216570182601f8201121561121657805190611d5382611499565b93611d616040519586611458565b8285528383830101116112165782611d7c938501910161121b565b606082015290565b90611d8e826114d3565b611d9b6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611dc982946114d3565b019060005b828110611dda57505050565b602090611de5611a49565b82828501015201611dce565b9192608052611dfe611c47565b50805190611e0a611c47565b60a052611e1682611c61565b602060a05101526040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815283600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015612612576000610100526125ec575b506101005151156125c2579091611eaf83611d84565b60e052611ebb83611c61565b60c0526000915b838310611eed575050505050611ee360805160c05160e051610100516132bc565b60a0515260a05190565b611efd83829793949596976115c2565b519167ffffffffffffffff60208401511680151590816125ad575b506125835760406101005101511580612576575b61254c5760608301519567ffffffffffffffff6020850151169673ffffffffffffffffffffffffffffffffffffffff85511660408601511515906080870151926040519a611f798c61143b565b60008c528960208d015267ffffffffffffffff421660408d015260608c0152600060808c015260a08b015260c08a015273ffffffffffffffffffffffffffffffffffffffff8a1660e08a015261010089015261012088015260005b602088015160c08901516120dd609d60e08c015160408d01518d60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182611458565b51902080600052600260205260406000205415612103575060010163ffffffff16611fd4565b905097969293909495919780845280600052600260205260406000209184518355602085015160018401556121df6002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b85789946122c16006840154611a94565b601f81116124f1575b50602090601f8311600114612424576006929160009183612419575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060810151806123c9575b5073ffffffffffffffffffffffffffffffffffffffff9060019561234a8660e0516115c2565b526123578560e0516115c2565b5060a08101516123698660c0516115c2565b528261237b86602060a05101516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8b1693a401919290611ec2565b6123e29193506000526002602052604060002054151590565b156123ef57869138612324565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806122e6565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106124d65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061249f575b505050811b01910155612319565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612491565b8183015184558d985060019093019260209283019201612435565b90919293949550600684016000526020600020601f840160051c810160208510612545575b908c979695949392915b601f830160051c820181106125365750506122ca565b600081558d9850600101612520565b5080612516565b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408301511515611f2c565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff4216101538611f18565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b612608903d806000833e6126008183611458565b810190611cbd565b6101005238611e99565b6040513d6000823e3d90fd5b929094939161262b611c47565b50855193612637611c47565b9461264181611c61565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561261257600092612d32575b508151156125c257929790916126d684611d84565b986126e085611c61565b946000935b818510612702575050505050956126fd949596613520565b815290565b919593989496999092976127168a846115c2565b519a67ffffffffffffffff60208d0151168015159081612d1d575b506125835760408901511580612d10575b61254c57899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f906127938261143b565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b6128be609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b519020806000526002602052604060002054156128e4575060010163ffffffff166127ed565b90509d979b9199929a949d9c909698939c80845280600052600260205260406000209184518355602085015160018401556129c66002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b8578894612aa86006840154611a94565b601f8111612cb5575b50602090601f8311600114612be8576006929160009183612bdd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180612bb0575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b46848660019e612b4083612b5e9a6115c2565b526115c2565b50612b568460a0890151926115c2565b5201516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a6126e5565b92505050612bcd9193506000526002602052604060002054151590565b156123ef5785918d8b8b38612b0e565b015190503880612acd565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085168110612c9a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610612c63575b505050811b01910155612b00565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612c55565b8183015184558c985060019093019260209283019201612bf9565b90919293949550600684016000526020600020601f840160051c810160208510612d09575b908b979695949392915b601f830160051c82018110612cfa575050612ab1565b600081558c9850600101612ce4565b5080612cda565b5060408c01511515612742565b905067ffffffffffffffff4216101538612731565b612d489192503d806000833e6126008183611458565b90386126c1565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561261257600091612fb1575b508051156125c2578251612de081611d84565b92612dea82611c61565b9460005b838110612e045750505050611399949550613701565b612e0e81836115c2565b5190815160005260028060205260406000208054156123ef57856001820154036125c2578c73ffffffffffffffffffffffffffffffffffffffff6005830154911673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8282015460801c16612f5d5790810180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c9190612ee282611ae7565b612eec858c6115c2565b52612ef7848b6115c2565b506020810151612f07858d6115c2565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a401612dee565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b612fc691503d806000833e6126008183611458565b38612dcd565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612612576000916131ed575b508051156125c257865161305e81611d84565b9261306882611c61565b9460005b8381106130825750505050611399959650613900565b61308c818c6115c2565b519081516000526002918260205260406000208054156123ef57846001820154036125c257600581015473ffffffffffffffffffffffffffffffffffffffff871673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8482015460801c16612f5d5792830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261315d81611ae7565b613167848b6115c2565b52613172838a6115c2565b506020820151613182848c6115c2565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161306c565b61320291503d806000833e6126008183611458565b3861304b565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061327157505050508281830391015281808451928381520193019160005b82811061325d575050505090565b83518552938101939281019260010161324f565b909192959485806132ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51611300565b979801949391909101910161322e565b9092918351936001908186146134ff5773ffffffffffffffffffffffffffffffffffffffff602080950151169182156134cf579560009687915b8083106133c1575050509183929161333f9492876040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af19081156126125760009161338d575b509050156133635761139990614091565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d83116133ba575b6133a18183611458565b8101031261025957506133b390611cb0565b8038613352565b503d613397565b909197966133cf89876115c2565b5180151580613449575b61341f578181116133f5578084920398019801909190916132f6565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613490575b50156133d9565b908982813d83116134be575b6134a68183611458565b8101031261025957506134b890611cb0565b38613489565b503d61349c565b513d6000823e3d90fd5b9594505050905060005b8281106134e95750505050600090565b6134f381836115c2565b5161341f5783016134d9565b6113999550613519915061351290611586565b5191611586565b5191613ad8565b9093918451946001908187146136e45773ffffffffffffffffffffffffffffffffffffffff602080950151169182156136b3579660009788915b80831061360357505050918392916135a39492886040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916135cf575b50905015613363576135c6575090565b61139990614091565b82813d83116135fc575b6135e38183611458565b8101031261025957506135f590611cb0565b80386135b6565b503d6135d9565b909198976136118a876115c2565b5180151580613637575b61341f578181116133f55780849203990199019091909161355a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c5575060009161367e575b501561361b565b908982813d83116136ac575b6136948183611458565b8101031261025957506136a690611cb0565b38613677565b503d61368a565b969550505091505060005b8281106136ce5750505050600090565b6136d881836115c2565b5161341f5783016136be565b61139996506136fa915061351290959495611586565b5191613c5f565b9092918351936001908186146138e65773ffffffffffffffffffffffffffffffffffffffff602080950151169182156138b6579560009687915b80831061380657505050918392916137849492876040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916137d2575b509050156137a85761139990614091565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d83116137ff575b6137e68183611458565b8101031261025957506137f890611cb0565b8038613797565b503d6137dc565b9091979661381489876115c2565b518015158061383a575b61341f578181116133f55780849203980198019091909161373b565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613881575b501561381e565b908982813d83116138af575b6138978183611458565b8101031261025957506138a990611cb0565b3861387a565b503d61388d565b9594505050905060005b8281106138d05750505050600090565b6138da81836115c2565b5161341f5783016138c0565b61139995506138f9915061351290611586565b5191613dc7565b909391845194600190818714613abb5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613a8a579660009788915b8083106139da57505050918392916139839492886040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916139a6575b509050156137a8576135c6575090565b82813d83116139d3575b6139ba8183611458565b8101031261025957506139cc90611cb0565b8038613996565b503d6139b0565b909198976139e88a876115c2565b5180151580613a0e575b61341f578181116133f55780849203990199019091909161393a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613a55575b50156139f2565b908982813d8311613a83575b613a6b8183611458565b810103126102595750613a7d90611cb0565b38613a4e565b503d613a61565b969550505091505060005b828110613aa55750505050600090565b613aaf81836115c2565b5161341f578301613a95565b6113999650613ad1915061351290959495611586565b5191613f41565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613bd8575b61341f578385116133f557613b54829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613ba4575b50905015613b7a57816113999103614091565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613bd1575b613bb88183611458565b810103126102595750613bca90611cb0565b8038613b67565b503d613bae565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613c1d575b5015613b06565b908382813d8311613c4b575b613c338183611458565b810103126102595750613c4590611cb0565b38613c16565b503d613c29565b5050505061341f57600090565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580613d3f575b61341f578486116133f557613cdb829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613d0b575b50905015613b7a578290613d0157505090565b6113999103614091565b82813d8311613d38575b613d1f8183611458565b810103126102595750613d3190611cb0565b8038613cee565b503d613d15565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613d84575b5015613c8d565b908382813d8311613db2575b613d9a8183611458565b810103126102595750613dac90611cb0565b38613d7d565b503d613d90565b505050505061341f57600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613ec7575b61341f578385116133f557613e43829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613e93575b50905015613e6957816113999103614091565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613ec0575b613ea78183611458565b810103126102595750613eb990611cb0565b8038613e56565b503d613e9d565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613f0c575b5015613df5565b908382813d8311613f3a575b613f228183611458565b810103126102595750613f3490611cb0565b38613f05565b503d613f18565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580614017575b61341f578486116133f557613fbd829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613fe3575b50905015613e69578290613d0157505090565b82813d8311614010575b613ff78183611458565b81010312610259575061400990611cb0565b8038613fd0565b503d613fed565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa9081156126125760009161405c575b5015613f6f565b908382813d831161408a575b6140728183611458565b81010312610259575061408490611cb0565b38614055565b503d614068565b806140995750565b80471061416257600080808093335af13d1561415d573d6140b981611499565b906140c76040519283611458565b8152600060203d92013e5b156140d957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b6140d2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6000818152600360205267ffffffffffffffff908160408220541661423c577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600360205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600460205260408120908381528160205267ffffffffffffffff80604083205416614301577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b9061433590611c61565b60009283925b8051841015614390579361434f84866115c2565b519160005b835181101561437f5761436781856115c2565b5161437284876115c2565b5260019283019201614354565b50909460019094019390915061433b565b509250905090565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480614496575b15614400577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152614490816113e7565b51902090565b507f000000000000000000000000000000000000000000000000000000000000000046146143d7565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260018252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e085015261010090818501528352610120830196838810908811176113b8576145aa86956145be946145c6998b52519020614830565b918860ff8351169183015192015192614794565b9490946145fb565b51169116036145d25750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614765578061460c5750565b600181036146725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036146d85760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146146e157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116148245791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa1561481757815173ffffffffffffffffffffffffffffffffffffffff811615614811579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614838614398565b906040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526144908161139c565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600160205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff8711176113b85761492d85946145be936145c6988a52519020614830565b9060ff8151168860208301519201519261479456fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323700000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/optimism-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon/.chainId",
    "content": "137\n"
  },
  {
    "path": "deployments/polygon/.migrations.json",
    "content": "{\n  \"000001-registry\": 1702921022,\n  \"000002-eas\": 1702921037,\n  \"000003-register-initial-schemas\": 1702964641,\n  \"000004-name-initial-schemas\": 1703017795,\n  \"000005-eip712-proxy\": 1703018283,\n  \"000006-indexer\": 1703018290\n}"
  },
  {
    "path": "deployments/polygon/EAS.json",
    "content": "{\n  \"address\": \"0x5E634ef5355f45A855d02D66eCD687b1502AF790\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5253ce80986ef95617b68373619fc70902b816cb29f8549e62e2961ce029d80b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xA074b0dc54aD2A2bf2aD792C0D41c2B3B80A01e5\",\n    \"contractAddress\": \"0x5E634ef5355f45A855d02D66eCD687b1502AF790\",\n    \"transactionIndex\": 73,\n    \"gasUsed\": \"4149084\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000000000000100000000000040000000000000000000000000800000000000000000000100000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000004000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000020000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000\",\n    \"blockHash\": \"0xab07796364c001828b47f2a94b7d510e65237c09c50b0e1a5979a91e619d6189\",\n    \"transactionHash\": \"0x5253ce80986ef95617b68373619fc70902b816cb29f8549e62e2961ce029d80b\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 73,\n        \"blockNumber\": 51279773,\n        \"transactionHash\": \"0x5253ce80986ef95617b68373619fc70902b816cb29f8549e62e2961ce029d80b\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000a074b0dc54ad2a2bf2ad792c0d41c2b3b80a01e5\",\n          \"0x00000000000000000000000030523527aced0ed2f5ce1721086d1d282d3af38f\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000161c5ad8f1e4000000000000000000000000000000000000000000000000047f2950327067170900000000000000000000000000000000000000000000009c0540dd8ab437a2370000000000000000000000000000000000000000000000047f1333d79775330900000000000000000000000000000000000000000000009c0556f9e58d298637\",\n        \"logIndex\": 2853,\n        \"blockHash\": \"0xab07796364c001828b47f2a94b7d510e65237c09c50b0e1a5979a91e619d6189\"\n      }\n    ],\n    \"blockNumber\": 51279773,\n    \"cumulativeGasUsed\": \"21434276\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x7876EEF51A891E737AF8ba5A5E0f0Fd29073D5a7\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ea0d05795645d57bddf4663011814c01\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0ccad8feb72c73528fddde76e00bd7717233711079e744165e34312169f85684\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8a6310b2a5d70bfd849fbf470507a545df5fb4934b59cd95337014ba017e485a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6959,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6963,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3954,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\"\n      },\n      {\n        \"astId\": 3958,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3964,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3848_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3848_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3829,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3831,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3833,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3835,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3837,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3839,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3841,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3843,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3845,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3847,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x4be71865917C7907ccA531270181D9B7dD4f2733\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc8ee81b06d65bb7c1160fd42f60cac5792a02ead9b0c802e7e2cfcb1bb796ed6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xA074b0dc54aD2A2bf2aD792C0D41c2B3B80A01e5\",\n    \"contractAddress\": \"0x4be71865917C7907ccA531270181D9B7dD4f2733\",\n    \"transactionIndex\": 126,\n    \"gasUsed\": \"2310047\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000000000000000000000000040000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000080000000080000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004200000000000020000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000\",\n    \"blockHash\": \"0xc569efb0ece216e929a3e07388e491fd8a4531efd0edc659ffc92d41dd55403c\",\n    \"transactionHash\": \"0xc8ee81b06d65bb7c1160fd42f60cac5792a02ead9b0c802e7e2cfcb1bb796ed6\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 126,\n        \"blockNumber\": 51322707,\n        \"transactionHash\": \"0xc8ee81b06d65bb7c1160fd42f60cac5792a02ead9b0c802e7e2cfcb1bb796ed6\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000a074b0dc54ad2a2bf2ad792c0d41c2b3b80a01e5\",\n          \"0x00000000000000000000000090b11143a0cb64e067402307bc7f2276dcec8250\"\n        ],\n        \"data\": \"0x000000000000000000000000000000000000000000000000000c4f76984631000000000000000000000000000000000000000000000000044ccb11b1417f672200000000000000000000000000000000000000000000001604a72a09fab0771c0000000000000000000000000000000000000000000000044cbec23aa939362200000000000000000000000000000000000000000000001604b3798092f6a81c\",\n        \"logIndex\": 545,\n        \"blockHash\": \"0xc569efb0ece216e929a3e07388e491fd8a4531efd0edc659ffc92d41dd55403c\"\n      }\n    ],\n    \"blockNumber\": 51322707,\n    \"cumulativeGasUsed\": \"24854410\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x5E634ef5355f45A855d02D66eCD687b1502AF790\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ea0d05795645d57bddf4663011814c01\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7363,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7367,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7371,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon/Indexer.json",
    "content": "{\n  \"address\": \"0x12d0f50Eb2d67b14293bdDA2C248358f3dfE5308\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf7330772f0010db37716af02f685624c6dfac15f7563ec73e2b17b0ec5275f4e\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xA074b0dc54aD2A2bf2aD792C0D41c2B3B80A01e5\",\n    \"contractAddress\": \"0x12d0f50Eb2d67b14293bdDA2C248358f3dfE5308\",\n    \"transactionIndex\": 124,\n    \"gasUsed\": \"981051\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000000000000000000000000040000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000080000000080000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004200000000000020000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000\",\n    \"blockHash\": \"0xbdf6c85815c2dbc50a1a8236e898cc107a62de4a11ef6b67b6e89ac251383c73\",\n    \"transactionHash\": \"0xf7330772f0010db37716af02f685624c6dfac15f7563ec73e2b17b0ec5275f4e\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 124,\n        \"blockNumber\": 51322711,\n        \"transactionHash\": \"0xf7330772f0010db37716af02f685624c6dfac15f7563ec73e2b17b0ec5275f4e\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000a074b0dc54ad2a2bf2ad792c0d41c2b3b80a01e5\",\n          \"0x00000000000000000000000090b11143a0cb64e067402307bc7f2276dcec8250\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000053a641a8ad5000000000000000000000000000000000000000000000000044afea0251f20e6b00000000000000000000000000000000000000000000000162396b21b793316e60000000000000000000000000000000000000000000000044af965c1049611b0000000000000000000000000000000000000000000000016239bec7f93bdebe6\",\n        \"logIndex\": 458,\n        \"blockHash\": \"0xbdf6c85815c2dbc50a1a8236e898cc107a62de4a11ef6b67b6e89ac251383c73\"\n      }\n    ],\n    \"blockNumber\": 51322711,\n    \"cumulativeGasUsed\": \"11942186\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x5E634ef5355f45A855d02D66eCD687b1502AF790\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ea0d05795645d57bddf4663011814c01\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6211,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6227,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6232,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6236,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x7876EEF51A891E737AF8ba5A5E0f0Fd29073D5a7\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd0e77fd5886ba5b6048e0e243961a7f5879d99220c85e58317a691f0e3021ef8\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xA074b0dc54aD2A2bf2aD792C0D41c2B3B80A01e5\",\n    \"contractAddress\": \"0x7876EEF51A891E737AF8ba5A5E0f0Fd29073D5a7\",\n    \"transactionIndex\": 80,\n    \"gasUsed\": \"631718\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000000000000100000000000040000000000000000000000000800000000000000000000100000000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000004000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000020000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000\",\n    \"blockHash\": \"0x09442fe2ece0e71342b2de59ad05d47431cd0ee31646e7bafbad20e87d019840\",\n    \"transactionHash\": \"0xd0e77fd5886ba5b6048e0e243961a7f5879d99220c85e58317a691f0e3021ef8\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 80,\n        \"blockNumber\": 51279767,\n        \"transactionHash\": \"0xd0e77fd5886ba5b6048e0e243961a7f5879d99220c85e58317a691f0e3021ef8\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000a074b0dc54ad2a2bf2ad792c0d41c2b3b80a01e5\",\n          \"0x00000000000000000000000030523527aced0ed2f5ce1721086d1d282d3af38f\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000035dd0f67b7a000000000000000000000000000000000000000000000000047fb5c887b9cc394900000000000000000000000000000000000000000000009bceabd4dddd382b1c0000000000000000000000000000000000000000000000047fb26ab6c350bf4900000000000000000000000000000000000000000000009bceaf32aed3b3a51c\",\n        \"logIndex\": 1387,\n        \"blockHash\": \"0x09442fe2ece0e71342b2de59ad05d47431cd0ee31646e7bafbad20e87d019840\"\n      }\n    ],\n    \"blockNumber\": 51279767,\n    \"cumulativeGasUsed\": \"12763024\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ea0d05795645d57bddf4663011814c01\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba2bb65a85b07bd4b0dce71c2603601d264f9fae7f10aa0a90849196df5f2b2a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6749,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)6131_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)8351\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)6131_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)6131_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)6131_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 6123,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 6126,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)8351\"\n          },\n          {\n            \"astId\": 6128,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 6130,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/.chainId",
    "content": "80002\n"
  },
  {
    "path": "deployments/polygon-amoy/.migrations.json",
    "content": "{\n  \"000001-registry\": 1716415922,\n  \"000002-eas\": 1716415937,\n  \"000003-register-initial-schemas\": 1716416376,\n  \"000004-name-initial-schemas\": 1716416816,\n  \"000005-eip712-proxy\": 1716416827,\n  \"000006-indexer\": 1716416838,\n  \"000100-test-seed\": 1716416977\n}"
  },
  {
    "path": "deployments/polygon-amoy/EAS.json",
    "content": "{\n  \"address\": \"0xb101275a60d8bfb14529C421899aD7CA1Ae5B5Fc\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressInsufficientBalance\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"FailedInnerCall\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x1cccd09146803f9a69307275c0b13f8a645fdd19d0fc58ba0d1aeb0fa88c26aa\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x586b120cb1f53FEFEd64900Ad641F6332D945DeE\",\n    \"contractAddress\": \"0xb101275a60d8bfb14529C421899aD7CA1Ae5B5Fc\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"4151693\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000400000000000000000000000000000000000800000000000000000000100001000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000200000000000000000000010000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000008000000000000000000000000000100000\",\n    \"blockHash\": \"0xe19787e83772d4c89a441ae92dfe0f9c0a23c955e078667f678b1043b75e4379\",\n    \"transactionHash\": \"0x1cccd09146803f9a69307275c0b13f8a645fdd19d0fc58ba0d1aeb0fa88c26aa\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 0,\n        \"blockNumber\": 7372416,\n        \"transactionHash\": \"0x1cccd09146803f9a69307275c0b13f8a645fdd19d0fc58ba0d1aeb0fa88c26aa\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000586b120cb1f53fefed64900ad641f6332d945dee\",\n          \"0x0000000000000000000000004ad84f7014b7b44f723f284a85b1662337971439\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000161fea07b8e30000000000000000000000000000000000000000000000000006ecef9d27f235620000000000000000000000000000000000000000000000ad39c020e4412f1ee600000000000000000000000000000000000000000000000006d6cfb3203952620000000000000000000000000000000000000000000000ad39d640ce48e801e6\",\n        \"logIndex\": 0,\n        \"blockHash\": \"0xe19787e83772d4c89a441ae92dfe0f9c0a23c955e078667f678b1043b75e4379\"\n      }\n    ],\n    \"blockNumber\": 7372416,\n    \"cumulativeGasUsed\": \"4151693\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x23c5701A1BDa89C61d181BD79E5203c730708AE7\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"7a54df152e0d395de6495f36af69f58e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.26+commit.8a97fa7a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressInsufficientBalance\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"FailedInnerCall\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"AddressInsufficientBalance(address)\\\":[{\\\"details\\\":\\\"The ETH balance of the account is not enough to perform the operation.\\\"}],\\\"FailedInnerCall()\\\":[{\\\"details\\\":\\\"A call to an address target failed. The target may have reverted.\\\"}]},\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID of the new attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\\\n     */\\\\n    error AddressInsufficientBalance(address account);\\\\n\\\\n    /**\\\\n     * @dev There's no code at `target` (it is not a contract).\\\\n     */\\\\n    error AddressEmptyCode(address target);\\\\n\\\\n    /**\\\\n     * @dev A call to an address target failed. The target may have reverted.\\\\n     */\\\\n    error FailedInnerCall();\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        if (address(this).balance < amount) {\\\\n            revert AddressInsufficientBalance(address(this));\\\\n        }\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        if (!success) {\\\\n            revert FailedInnerCall();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\\\n     * up by this function (like regular Solidity function calls). However, if\\\\n     * the call reverted with no returned reason, this function reverts with a\\\\n     * {FailedInnerCall} error.\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        if (address(this).balance < value) {\\\\n            revert AddressInsufficientBalance(address(this));\\\\n        }\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\\\n     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\\\\n     * unsuccessful call.\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata\\\\n    ) internal view returns (bytes memory) {\\\\n        if (!success) {\\\\n            _revert(returndata);\\\\n        } else {\\\\n            // only check if target is a contract if the call was successful and the return data is empty\\\\n            // otherwise we already know that it was a contract\\\\n            if (returndata.length == 0 && target.code.length == 0) {\\\\n                revert AddressEmptyCode(target);\\\\n            }\\\\n            return returndata;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\\\n     * revert reason or with a default {FailedInnerCall} error.\\\\n     */\\\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\\\n        if (!success) {\\\\n            _revert(returndata);\\\\n        } else {\\\\n            return returndata;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\\\\n     */\\\\n    function _revert(bytes memory returndata) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert FailedInnerCall();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {ECDSA} from \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport {IERC1271} from \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Safe Wallet (previously Gnosis Safe).\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6b11eb41a228cca35d4b662b4df69fcd75192851365102690f57b2ac01e83fe6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.26;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x386b8f36744eb2df6aaf571351a095f7af16c6ce122db4e1d958617899d3ba6e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.26;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x10dff7b428298675b42e81af653de9a30e1433ed96fb3292596138cf097d4648\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051614e58380380614e58833981016040819052610030916101f3565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c081905290919082908290610088908390610179565b61018052610097816001610179565b6101a0528151602080840191909120610140528151908201206101605246610100526101276101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e05250503061012052600261013d83826102c2565b5050506001600160a01b038116610167576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c0526103f2565b60006020835110156101955761018e836101ac565b90506101a6565b816101a084826102c2565b5060ff90505b92915050565b600080829050601f815111156101e0578260405163305a27a960e01b81526004016101d79190610380565b60405180910390fd5b80516101eb826103ce565b179392505050565b60006020828403121561020557600080fd5b81516001600160a01b038116811461021c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061024d57607f821691505b60208210810361026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bd57806000526020600020601f840160051c8101602085101561029a5750805b601f840160051c820191505b818110156102ba57600081556001016102a6565b50505b505050565b81516001600160401b038111156102db576102db610223565b6102ef816102e98454610239565b84610273565b6020601f821160018114610323576000831561030b5750848201515b600019600385901b1c1916600184901b1784556102ba565b600084815260208120601f198516915b828110156103535787850151825560209485019460019092019101610333565b50848210156103715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156103ae5760208186018101516040868401015201610391565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561026d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149d261048660003960008181610538015281816115c10152611ef901526000612824015260006127f70152600061293101526000612909015260006128640152600061288e015260006128b801526000610c3401526000610c0b01526000610be201526149d26000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081a000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081a000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"AddressInsufficientBalance(address)\": [\n        {\n          \"details\": \"The ETH balance of the account is not enough to perform the operation.\"\n        }\n      ],\n      \"FailedInnerCall()\": [\n        {\n          \"details\": \"A call to an address target failed. The target may have reverted.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID of the new attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2518,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2520,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7212,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7216,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 4198,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)4092_storage)\"\n      },\n      {\n        \"astId\": 4202,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 4208,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)4092_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)4092_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)4092_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 4073,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4075,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4077,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4079,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4081,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4083,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4085,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4087,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4089,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 4091,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon-amoy/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xA0ec8a80a0b8496B9Cf6Ee703bC16ABdC9F4cf2e\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x7e30f82031b02168c9751b9de5d5f193cfe94bf3f39117a2da50e5c79f95b227\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x586b120cb1f53FEFEd64900Ad641F6332D945DeE\",\n    \"contractAddress\": \"0xA0ec8a80a0b8496B9Cf6Ee703bC16ABdC9F4cf2e\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"2292355\",\n    \"logsBloom\": \"0x00000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000200000000000000000000010000000000000000000000004000000000000000000001000000000000000002000000000000100000000000000000000000000000000000000000000000000000400000000000000000100000\",\n    \"blockHash\": \"0x5bc2a33e4b8db0daee22ad119a9df97aa77d0cbcb780b61ead506f62b2676e5c\",\n    \"transactionHash\": \"0x7e30f82031b02168c9751b9de5d5f193cfe94bf3f39117a2da50e5c79f95b227\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 0,\n        \"blockNumber\": 7372836,\n        \"transactionHash\": \"0x7e30f82031b02168c9751b9de5d5f193cfe94bf3f39117a2da50e5c79f95b227\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000586b120cb1f53fefed64900ad641f6332d945dee\",\n          \"0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6\"\n        ],\n        \"data\": \"0x000000000000000000000000000000000000000000000000000c3753bc360d00000000000000000000000000000000000000000000000000067b10debb0b7f7b00000000000000000000000000000000000000000000016a93113ad80a25cb08000000000000000000000000000000000000000000000000066ed98afed5727b00000000000000000000000000000000000000000000016a931d722bc65bd808\",\n        \"logIndex\": 0,\n        \"blockHash\": \"0x5bc2a33e4b8db0daee22ad119a9df97aa77d0cbcb780b61ead506f62b2676e5c\"\n      }\n    ],\n    \"blockNumber\": 7372836,\n    \"cumulativeGasUsed\": \"2292355\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xb101275a60d8bfb14529C421899aD7CA1Ae5B5Fc\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"7a54df152e0d395de6495f36af69f58e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.26+commit.8a97fa7a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.26;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x088f5dab5a25bee796920fa63bea69dc3dffc4fa409600f1047f0c8f6260b125\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d14380380612d1483398101604081905261003091610211565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516127ef610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c01526000611262015260006112350152600061136f01526000611347015260006112a2015260006112cc015260006112f6015260006107760152600061074d0152600061072401526127ef6000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119a4565b6102ab565b005b3480156100ed57600080fd5b506101246100fc3660046119e6565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a6d565b61017d6101bb366004611a87565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611ac2565b61024361023e3660046119a4565b610822565b6040516101459190611b83565b6100df61025e366004611bc6565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611be2565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c11565b90506020028101906103419190611c40565b61034a90611ead565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c11565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c11565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c11565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fae565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f90612085565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90612085565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e0836121fe565b610f8e565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612277565b610652906122ab565b8152506040518363ffffffff1660e01b8152600401610671919061232a565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612357565b90506106c660c0840160a08501612370565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611170565b6107717f0000000000000000000000000000000000000000000000000000000000000000611170565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611170565b6040516020016107ac9392919061238b565b604051602081830303815290604052905090565b6000606080600080600060606107d461122e565b6107dc61125b565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611be2565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c11565b90506020028101906108b99190611c40565b90503660006108cb6020840184612422565b9092509050808015806108ec57506108e6604085018561248a565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c11565b905060200281019061096a9190612277565b610973906122ab565b8152602001610985604089018961248a565b8581811061099557610995611c11565b9050606002018036038101906109ab91906124f1565b81526020016109c06080890160608a01612370565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a0161250d565b67ffffffffffffffff169052610f8e565b600101610926565b50604080518082019091528435815260208101610a218486612528565b815250868681518110610a3657610a36611c11565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab3919061258e565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b189190810190612681565b90506000805b84811015610c155736888883818110610b3957610b39611c11565b9050602002810190610b4b9190611c40565b9050366000610b5d6020840184612422565b90925090508060005b81811015610bff57610b7e6080860160608701612370565b600360008a8a81518110610b9457610b94611c11565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612717565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca09190612785565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d611288565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e51576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e5f816113c0565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f059060e0015b604051602081830303815290604052805190602001206114ce565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f3a82846000015185602001518660400151611516565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fc257504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ff9576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161100c816113c0565b60006110e87fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610eea9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661111d82846000015185602001518660400151611516565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060600061117d83611544565b600101905060008167ffffffffffffffff81111561119d5761119d611be2565b6040519080825280601f01601f1916602001820160405280156111c7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111d157509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611626565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611626565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156112ee57507f000000000000000000000000000000000000000000000000000000000000000046145b1561131857507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161143091906127a1565b9081526040519081900360200190205460ff161561147a576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161148c91906127a1565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114db611288565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611528888888886116d1565b92509250925061153882826117cb565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061158d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115b9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115d757662386f26fc10000830492506010015b6305f5e10083106115ef576305f5e100830492506008015b612710831061160357612710830492506004015b60648310611615576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461164057611639836118d8565b9050610c1d565b81805461164c90612085565b80601f016020809104026020016040519081016040528092919081815260200182805461167890612085565b80156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561170c57506000915060039050826117c1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611760573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117b7575060009250600191508290506117c1565b9250600091508190505b9450945094915050565b60008260038111156117df576117df6127b3565b036117e8575050565b60018260038111156117fc576117fc6127b3565b03611833576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611847576118476127b3565b03611886576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600382600381111561189a5761189a6127b3565b036118d4576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240161187d565b5050565b606060006118e583611917565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261196a57600080fd5b50813567ffffffffffffffff81111561198257600080fd5b6020830191508360208260051b850101111561199d57600080fd5b9250929050565b600080602083850312156119b757600080fd5b823567ffffffffffffffff8111156119ce57600080fd5b6119da85828601611958565b90969095509350505050565b6000602082840312156119f857600080fd5b5035919050565b60005b83811015611a1a578181015183820152602001611a02565b50506000910152565b60008151808452611a3b8160208601602086016119ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a806020830184611a23565b9392505050565b600060208284031215611a9957600080fd5b813567ffffffffffffffff811115611ab057600080fd5b820160e08185031215611a8057600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611afd60e0830189611a23565b8281036040840152611b0f8189611a23565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b72578351835260209384019390920191600101611b54565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bbb578351835260209384019390920191600101611b9d565b509095945050505050565b6000610100828403128015611bda57600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c7457600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611ca157611ca1611be2565b60405290565b60405160c0810167ffffffffffffffff81118282101715611ca157611ca1611be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d1157611d11611be2565b604052919050565b600067ffffffffffffffff821115611d3357611d33611be2565b5060051b60200190565b600060408284031215611d4f57600080fd5b6040805190810167ffffffffffffffff81118282101715611d7257611d72611be2565b604052823581526020928301359281019290925250919050565b600060608284031215611d9e57600080fd5b6040516060810167ffffffffffffffff81118282101715611dc157611dc1611be2565b604052905080823560ff81168114611dd857600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e0657600080fd5b8135611e19611e1482611d19565b611cca565b80828252602082019150602060608402860101925085831115611e3b57600080fd5b602085015b83811015611e6257611e528782611d8c565b8352602090920191606001611e40565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e9057600080fd5b919050565b803567ffffffffffffffff81168114611e9057600080fd5b600060a08236031215611ebf57600080fd5b611ec7611c7e565b82358152602083013567ffffffffffffffff811115611ee557600080fd5b830136601f820112611ef657600080fd5b8035611f04611e1482611d19565b8082825260208201915060208360061b850101925036831115611f2657600080fd5b6020840193505b82841015611f5257611f3f3685611d3d565b8252602082019150604084019350611f2d565b6020850152505050604083013567ffffffffffffffff811115611f7457600080fd5b611f8036828601611df5565b604083015250611f9260608401611e6c565b6060820152611fa360808401611e95565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612079578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b808310156120615761204a82855180518252602090810151910152565b60408201915060208401935060018301925061202d565b50965050506020938401939190910190600101611fd6565b50929695505050505050565b600181811c9082168061209957607f821691505b6020821081036120d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f8301126120e957600080fd5b813567ffffffffffffffff81111561210357612103611be2565b61213460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611cca565b81815284602083860101111561214957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561217857600080fd5b612180611ca7565b905061218b82611e6c565b815261219960208301611e95565b6020820152604082013580151581146121b157600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121da57600080fd5b6121e6848285016120d8565b60808301525060a09182013591810191909152919050565b600060e0823603121561221057600080fd5b612218611c7e565b82358152602083013567ffffffffffffffff81111561223657600080fd5b61224236828601612166565b6020830152506122553660408501611d8c565b604082015261226660a08401611e6c565b6060820152611fa360c08401611e95565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c7457600080fd5b6000610c1d3683612166565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261231660c0850182611a23565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261234f60608401826122b7565b949350505050565b60006020828403121561236957600080fd5b5051919050565b60006020828403121561238257600080fd5b611a8082611e6c565b6000845161239d8184602089016119ff565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123d78160018401602089016119ff565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516124158160028401602088016119ff565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261245757600080fd5b83018035915067ffffffffffffffff82111561247257600080fd5b6020019150600581901b360382131561199d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124bf57600080fd5b83018035915067ffffffffffffffff8211156124da57600080fd5b602001915060608102360382131561199d57600080fd5b60006060828403121561250357600080fd5b611a808383611d8c565b60006020828403121561251f57600080fd5b611a8082611e95565b6000612536611e1484611d19565b8381526020810190600585901b84013681111561255257600080fd5b845b81811015611bbb57803567ffffffffffffffff81111561257357600080fd5b61257f36828901612166565b85525060209384019301612554565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612079577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612667577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526126518486516122b7565b6020958601959094509290920191600101612617565b5091975050506020948501949290920191506001016125b6565b60006020828403121561269357600080fd5b815167ffffffffffffffff8111156126aa57600080fd5b8201601f810184136126bb57600080fd5b80516126c9611e1482611d19565b8082825260208201915060208360051b8501019250868311156126eb57600080fd5b6020840193505b8284101561270d5783518252602093840193909101906126f2565b9695505050505050565b600061010082840312801561272b57600080fd5b50612734611c7e565b823581526127458460208501611d3d565b60208201526127578460608501611d8c565b604082015261276860c08401611e6c565b606082015261277960e08401611e95565b60808201529392505050565b60006040828403121561279757600080fd5b611a808383611d3d565b60008251611c748184602087016119ff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081a000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119a4565b6102ab565b005b3480156100ed57600080fd5b506101246100fc3660046119e6565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a6d565b61017d6101bb366004611a87565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611ac2565b61024361023e3660046119a4565b610822565b6040516101459190611b83565b6100df61025e366004611bc6565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611be2565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c11565b90506020028101906103419190611c40565b61034a90611ead565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c11565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c11565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c11565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fae565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f90612085565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90612085565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e0836121fe565b610f8e565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612277565b610652906122ab565b8152506040518363ffffffff1660e01b8152600401610671919061232a565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612357565b90506106c660c0840160a08501612370565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611170565b6107717f0000000000000000000000000000000000000000000000000000000000000000611170565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611170565b6040516020016107ac9392919061238b565b604051602081830303815290604052905090565b6000606080600080600060606107d461122e565b6107dc61125b565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611be2565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c11565b90506020028101906108b99190611c40565b90503660006108cb6020840184612422565b9092509050808015806108ec57506108e6604085018561248a565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c11565b905060200281019061096a9190612277565b610973906122ab565b8152602001610985604089018961248a565b8581811061099557610995611c11565b9050606002018036038101906109ab91906124f1565b81526020016109c06080890160608a01612370565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a0161250d565b67ffffffffffffffff169052610f8e565b600101610926565b50604080518082019091528435815260208101610a218486612528565b815250868681518110610a3657610a36611c11565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab3919061258e565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b189190810190612681565b90506000805b84811015610c155736888883818110610b3957610b39611c11565b9050602002810190610b4b9190611c40565b9050366000610b5d6020840184612422565b90925090508060005b81811015610bff57610b7e6080860160608701612370565b600360008a8a81518110610b9457610b94611c11565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612717565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca09190612785565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d611288565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e51576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e5f816113c0565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f059060e0015b604051602081830303815290604052805190602001206114ce565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f3a82846000015185602001518660400151611516565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fc257504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ff9576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161100c816113c0565b60006110e87fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610eea9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661111d82846000015185602001518660400151611516565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060600061117d83611544565b600101905060008167ffffffffffffffff81111561119d5761119d611be2565b6040519080825280601f01601f1916602001820160405280156111c7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111d157509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611626565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611626565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156112ee57507f000000000000000000000000000000000000000000000000000000000000000046145b1561131857507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161143091906127a1565b9081526040519081900360200190205460ff161561147a576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161148c91906127a1565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114db611288565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611528888888886116d1565b92509250925061153882826117cb565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061158d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115b9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115d757662386f26fc10000830492506010015b6305f5e10083106115ef576305f5e100830492506008015b612710831061160357612710830492506004015b60648310611615576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461164057611639836118d8565b9050610c1d565b81805461164c90612085565b80601f016020809104026020016040519081016040528092919081815260200182805461167890612085565b80156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561170c57506000915060039050826117c1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611760573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117b7575060009250600191508290506117c1565b9250600091508190505b9450945094915050565b60008260038111156117df576117df6127b3565b036117e8575050565b60018260038111156117fc576117fc6127b3565b03611833576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611847576118476127b3565b03611886576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600382600381111561189a5761189a6127b3565b036118d4576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240161187d565b5050565b606060006118e583611917565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261196a57600080fd5b50813567ffffffffffffffff81111561198257600080fd5b6020830191508360208260051b850101111561199d57600080fd5b9250929050565b600080602083850312156119b757600080fd5b823567ffffffffffffffff8111156119ce57600080fd5b6119da85828601611958565b90969095509350505050565b6000602082840312156119f857600080fd5b5035919050565b60005b83811015611a1a578181015183820152602001611a02565b50506000910152565b60008151808452611a3b8160208601602086016119ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a806020830184611a23565b9392505050565b600060208284031215611a9957600080fd5b813567ffffffffffffffff811115611ab057600080fd5b820160e08185031215611a8057600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611afd60e0830189611a23565b8281036040840152611b0f8189611a23565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b72578351835260209384019390920191600101611b54565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bbb578351835260209384019390920191600101611b9d565b509095945050505050565b6000610100828403128015611bda57600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c7457600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611ca157611ca1611be2565b60405290565b60405160c0810167ffffffffffffffff81118282101715611ca157611ca1611be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d1157611d11611be2565b604052919050565b600067ffffffffffffffff821115611d3357611d33611be2565b5060051b60200190565b600060408284031215611d4f57600080fd5b6040805190810167ffffffffffffffff81118282101715611d7257611d72611be2565b604052823581526020928301359281019290925250919050565b600060608284031215611d9e57600080fd5b6040516060810167ffffffffffffffff81118282101715611dc157611dc1611be2565b604052905080823560ff81168114611dd857600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e0657600080fd5b8135611e19611e1482611d19565b611cca565b80828252602082019150602060608402860101925085831115611e3b57600080fd5b602085015b83811015611e6257611e528782611d8c565b8352602090920191606001611e40565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e9057600080fd5b919050565b803567ffffffffffffffff81168114611e9057600080fd5b600060a08236031215611ebf57600080fd5b611ec7611c7e565b82358152602083013567ffffffffffffffff811115611ee557600080fd5b830136601f820112611ef657600080fd5b8035611f04611e1482611d19565b8082825260208201915060208360061b850101925036831115611f2657600080fd5b6020840193505b82841015611f5257611f3f3685611d3d565b8252602082019150604084019350611f2d565b6020850152505050604083013567ffffffffffffffff811115611f7457600080fd5b611f8036828601611df5565b604083015250611f9260608401611e6c565b6060820152611fa360808401611e95565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612079578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b808310156120615761204a82855180518252602090810151910152565b60408201915060208401935060018301925061202d565b50965050506020938401939190910190600101611fd6565b50929695505050505050565b600181811c9082168061209957607f821691505b6020821081036120d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f8301126120e957600080fd5b813567ffffffffffffffff81111561210357612103611be2565b61213460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611cca565b81815284602083860101111561214957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561217857600080fd5b612180611ca7565b905061218b82611e6c565b815261219960208301611e95565b6020820152604082013580151581146121b157600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121da57600080fd5b6121e6848285016120d8565b60808301525060a09182013591810191909152919050565b600060e0823603121561221057600080fd5b612218611c7e565b82358152602083013567ffffffffffffffff81111561223657600080fd5b61224236828601612166565b6020830152506122553660408501611d8c565b604082015261226660a08401611e6c565b6060820152611fa360c08401611e95565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c7457600080fd5b6000610c1d3683612166565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261231660c0850182611a23565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261234f60608401826122b7565b949350505050565b60006020828403121561236957600080fd5b5051919050565b60006020828403121561238257600080fd5b611a8082611e6c565b6000845161239d8184602089016119ff565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123d78160018401602089016119ff565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516124158160028401602088016119ff565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261245757600080fd5b83018035915067ffffffffffffffff82111561247257600080fd5b6020019150600581901b360382131561199d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124bf57600080fd5b83018035915067ffffffffffffffff8211156124da57600080fd5b602001915060608102360382131561199d57600080fd5b60006060828403121561250357600080fd5b611a808383611d8c565b60006020828403121561251f57600080fd5b611a8082611e95565b6000612536611e1484611d19565b8381526020810190600585901b84013681111561255257600080fd5b845b81811015611bbb57803567ffffffffffffffff81111561257357600080fd5b61257f36828901612166565b85525060209384019301612554565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612079577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612667577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526126518486516122b7565b6020958601959094509290920191600101612617565b5091975050506020948501949290920191506001016125b6565b60006020828403121561269357600080fd5b815167ffffffffffffffff8111156126aa57600080fd5b8201601f810184136126bb57600080fd5b80516126c9611e1482611d19565b8082825260208201915060208360051b8501019250868311156126eb57600080fd5b6020840193505b8284101561270d5783518252602093840193909101906126f2565b9695505050505050565b600061010082840312801561272b57600080fd5b50612734611c7e565b823581526127458460208501611d3d565b60208201526127578460608501611d8c565b604082015261276860c08401611e6c565b606082015261277960e08401611e95565b60808201529392505050565b60006040828403121561279757600080fd5b611a808383611d3d565b60008251611c748184602087016119ff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081a000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2518,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2520,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7616,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7620,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7624,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon-amoy/Indexer.json",
    "content": "{\n  \"address\": \"0x9F07c0B0E52C36D78Ac8ABfC543c77f83888ac64\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc4581a0cb01c1e5e1960acdaefc803f903258432110f5f0f6019f209bf028d80\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x586b120cb1f53FEFEd64900Ad641F6332D945DeE\",\n    \"contractAddress\": \"0x9F07c0B0E52C36D78Ac8ABfC543c77f83888ac64\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"989748\",\n    \"logsBloom\": \"0x00000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000200000000000000000000010000000000000000000000004000000000000000000001000000000000000002000000000000100000000000000000000000000000000000000000000000000000400000000000000000100000\",\n    \"blockHash\": \"0x8524d7fae6bc659d7bc5420ef7fe0e676c58f631c58b85e40213b3b1b6864a60\",\n    \"transactionHash\": \"0xc4581a0cb01c1e5e1960acdaefc803f903258432110f5f0f6019f209bf028d80\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 7372841,\n        \"transactionHash\": \"0xc4581a0cb01c1e5e1960acdaefc803f903258432110f5f0f6019f209bf028d80\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000586b120cb1f53fefed64900ad641f6332d945dee\",\n          \"0x000000000000000000000000915a2284d28bd93de7d6f31173b981204bb666e6\"\n        ],\n        \"data\": \"0x000000000000000000000000000000000000000000000000000546417eef8c00000000000000000000000000000000000000000000000000066ed98afcc8c4ce00000000000000000000000000000000000000000000016a93492b26aa169c52000000000000000000000000000000000000000000000000066993497dd938ce00000000000000000000000000000000000000000000016a934e716829062852\",\n        \"logIndex\": 9,\n        \"blockHash\": \"0x8524d7fae6bc659d7bc5420ef7fe0e676c58f631c58b85e40213b3b1b6864a60\"\n      }\n    ],\n    \"blockNumber\": 7372841,\n    \"cumulativeGasUsed\": \"1288386\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xb101275a60d8bfb14529C421899aD7CA1Ae5B5Fc\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"7a54df152e0d395de6495f36af69f58e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.26+commit.8a97fa7a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.26;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xaee3f8da37c9c06ca876ad237d370e70f5bfc4d906e4c1c3b6141c3fade24006\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081a000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081a000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6464,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6471,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6480,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6485,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6489,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon-amoy/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x23c5701A1BDa89C61d181BD79E5203c730708AE7\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x84c409a48ad72cf09e6859a2bfd8a2c986ca67e2ae912563830532c24442bebe\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x586b120cb1f53FEFEd64900Ad641F6332D945DeE\",\n    \"contractAddress\": \"0x23c5701A1BDa89C61d181BD79E5203c730708AE7\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"641922\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000008000000000000000000040000000000000000000000000000000000000800000000000000000000100000000000000000000000000100000000000000000000000000000000080000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000200000000000000000000010000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000\",\n    \"blockHash\": \"0x3131535b4c004875ec4e015b2bab5fbf57d097fd2896f7c13784d35544523e13\",\n    \"transactionHash\": \"0x84c409a48ad72cf09e6859a2bfd8a2c986ca67e2ae912563830532c24442bebe\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 0,\n        \"blockNumber\": 7372410,\n        \"transactionHash\": \"0x84c409a48ad72cf09e6859a2bfd8a2c986ca67e2ae912563830532c24442bebe\",\n        \"address\": \"0x0000000000000000000000000000000000001010\",\n        \"topics\": [\n          \"0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63\",\n          \"0x0000000000000000000000000000000000000000000000000000000000001010\",\n          \"0x000000000000000000000000586b120cb1f53fefed64900ad641f6332d945dee\",\n          \"0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000036bbcab2cde0000000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000752dd7a0d462566fa300000000000000000000000000000000000000000000000006ecef9d288522000000000000000000000000000000000000000000000000752ddb0c910d834da3\",\n        \"logIndex\": 0,\n        \"blockHash\": \"0x3131535b4c004875ec4e015b2bab5fbf57d097fd2896f7c13784d35544523e13\"\n      }\n    ],\n    \"blockNumber\": 7372410,\n    \"cumulativeGasUsed\": \"641922\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"7a54df152e0d395de6495f36af69f58e\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.26+commit.8a97fa7a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.26;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x278d80056cad9756840d7b57400e80d332846dde8551d2d2e277f42993fad66f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e0604052348015600f57600080fd5b506001608052600360a052600060c05260805160a05160c051610ab561004b600039600060fe0152600060d50152600060ac0152610ab56000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081a000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081a000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7002,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)6386_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)8608\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)6386_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)6386_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)6386_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 6378,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 6381,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)8608\"\n          },\n          {\n            \"astId\": 6383,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 6385,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/polygon-amoy/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051614e58380380614e58833981016040819052610030916101f3565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c081905290919082908290610088908390610179565b61018052610097816001610179565b6101a0528151602080840191909120610140528151908201206101605246610100526101276101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e05250503061012052600261013d83826102c2565b5050506001600160a01b038116610167576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c0526103f2565b60006020835110156101955761018e836101ac565b90506101a6565b816101a084826102c2565b5060ff90505b92915050565b600080829050601f815111156101e0578260405163305a27a960e01b81526004016101d79190610380565b60405180910390fd5b80516101eb826103ce565b179392505050565b60006020828403121561020557600080fd5b81516001600160a01b038116811461021c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061024d57607f821691505b60208210810361026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bd57806000526020600020601f840160051c8101602085101561029a5750805b601f840160051c820191505b818110156102ba57600081556001016102a6565b50505b505050565b81516001600160401b038111156102db576102db610223565b6102ef816102e98454610239565b84610273565b6020601f821160018114610323576000831561030b5750848201515b600019600385901b1c1916600184901b1784556102ba565b600084815260208120601f198516915b828110156103535787850151825560209485019460019092019101610333565b50848210156103715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156103ae5760208186018101516040868401015201610391565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561026d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149d261048660003960008181610538015281816115c10152611ef901526000612824015260006127f70152600061293101526000612909015260006128640152600061288e015260006128b801526000610c3401526000610c0b01526000610be201526149d26000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081a000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081a000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e0604052348015600f57600080fd5b506001608052600360a052600060c05260805160a05160c051610ab561004b600039600060fe0152600060d50152600060ac0152610ab56000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081a000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/polygon-amoy/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d14380380612d1483398101604081905261003091610211565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516127ef610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c01526000611262015260006112350152600061136f01526000611347015260006112a2015260006112cc015260006112f6015260006107760152600061074d0152600061072401526127ef6000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119a4565b6102ab565b005b3480156100ed57600080fd5b506101246100fc3660046119e6565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a6d565b61017d6101bb366004611a87565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611ac2565b61024361023e3660046119a4565b610822565b6040516101459190611b83565b6100df61025e366004611bc6565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611be2565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c11565b90506020028101906103419190611c40565b61034a90611ead565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c11565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c11565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c11565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fae565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f90612085565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90612085565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e0836121fe565b610f8e565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612277565b610652906122ab565b8152506040518363ffffffff1660e01b8152600401610671919061232a565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612357565b90506106c660c0840160a08501612370565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611170565b6107717f0000000000000000000000000000000000000000000000000000000000000000611170565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611170565b6040516020016107ac9392919061238b565b604051602081830303815290604052905090565b6000606080600080600060606107d461122e565b6107dc61125b565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611be2565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c11565b90506020028101906108b99190611c40565b90503660006108cb6020840184612422565b9092509050808015806108ec57506108e6604085018561248a565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c11565b905060200281019061096a9190612277565b610973906122ab565b8152602001610985604089018961248a565b8581811061099557610995611c11565b9050606002018036038101906109ab91906124f1565b81526020016109c06080890160608a01612370565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a0161250d565b67ffffffffffffffff169052610f8e565b600101610926565b50604080518082019091528435815260208101610a218486612528565b815250868681518110610a3657610a36611c11565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab3919061258e565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b189190810190612681565b90506000805b84811015610c155736888883818110610b3957610b39611c11565b9050602002810190610b4b9190611c40565b9050366000610b5d6020840184612422565b90925090508060005b81811015610bff57610b7e6080860160608701612370565b600360008a8a81518110610b9457610b94611c11565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612717565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca09190612785565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d611288565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e51576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e5f816113c0565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f059060e0015b604051602081830303815290604052805190602001206114ce565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f3a82846000015185602001518660400151611516565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fc257504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ff9576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161100c816113c0565b60006110e87fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610eea9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661111d82846000015185602001518660400151611516565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060600061117d83611544565b600101905060008167ffffffffffffffff81111561119d5761119d611be2565b6040519080825280601f01601f1916602001820160405280156111c7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111d157509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611626565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611626565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156112ee57507f000000000000000000000000000000000000000000000000000000000000000046145b1561131857507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161143091906127a1565b9081526040519081900360200190205460ff161561147a576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161148c91906127a1565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114db611288565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611528888888886116d1565b92509250925061153882826117cb565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061158d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115b9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115d757662386f26fc10000830492506010015b6305f5e10083106115ef576305f5e100830492506008015b612710831061160357612710830492506004015b60648310611615576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461164057611639836118d8565b9050610c1d565b81805461164c90612085565b80601f016020809104026020016040519081016040528092919081815260200182805461167890612085565b80156116c55780601f1061169a576101008083540402835291602001916116c5565b820191906000526020600020905b8154815290600101906020018083116116a857829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561170c57506000915060039050826117c1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611760573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117b7575060009250600191508290506117c1565b9250600091508190505b9450945094915050565b60008260038111156117df576117df6127b3565b036117e8575050565b60018260038111156117fc576117fc6127b3565b03611833576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611847576118476127b3565b03611886576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600382600381111561189a5761189a6127b3565b036118d4576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240161187d565b5050565b606060006118e583611917565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261196a57600080fd5b50813567ffffffffffffffff81111561198257600080fd5b6020830191508360208260051b850101111561199d57600080fd5b9250929050565b600080602083850312156119b757600080fd5b823567ffffffffffffffff8111156119ce57600080fd5b6119da85828601611958565b90969095509350505050565b6000602082840312156119f857600080fd5b5035919050565b60005b83811015611a1a578181015183820152602001611a02565b50506000910152565b60008151808452611a3b8160208601602086016119ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a806020830184611a23565b9392505050565b600060208284031215611a9957600080fd5b813567ffffffffffffffff811115611ab057600080fd5b820160e08185031215611a8057600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611afd60e0830189611a23565b8281036040840152611b0f8189611a23565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b72578351835260209384019390920191600101611b54565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bbb578351835260209384019390920191600101611b9d565b509095945050505050565b6000610100828403128015611bda57600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c7457600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611ca157611ca1611be2565b60405290565b60405160c0810167ffffffffffffffff81118282101715611ca157611ca1611be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d1157611d11611be2565b604052919050565b600067ffffffffffffffff821115611d3357611d33611be2565b5060051b60200190565b600060408284031215611d4f57600080fd5b6040805190810167ffffffffffffffff81118282101715611d7257611d72611be2565b604052823581526020928301359281019290925250919050565b600060608284031215611d9e57600080fd5b6040516060810167ffffffffffffffff81118282101715611dc157611dc1611be2565b604052905080823560ff81168114611dd857600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e0657600080fd5b8135611e19611e1482611d19565b611cca565b80828252602082019150602060608402860101925085831115611e3b57600080fd5b602085015b83811015611e6257611e528782611d8c565b8352602090920191606001611e40565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e9057600080fd5b919050565b803567ffffffffffffffff81168114611e9057600080fd5b600060a08236031215611ebf57600080fd5b611ec7611c7e565b82358152602083013567ffffffffffffffff811115611ee557600080fd5b830136601f820112611ef657600080fd5b8035611f04611e1482611d19565b8082825260208201915060208360061b850101925036831115611f2657600080fd5b6020840193505b82841015611f5257611f3f3685611d3d565b8252602082019150604084019350611f2d565b6020850152505050604083013567ffffffffffffffff811115611f7457600080fd5b611f8036828601611df5565b604083015250611f9260608401611e6c565b6060820152611fa360808401611e95565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612079578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b808310156120615761204a82855180518252602090810151910152565b60408201915060208401935060018301925061202d565b50965050506020938401939190910190600101611fd6565b50929695505050505050565b600181811c9082168061209957607f821691505b6020821081036120d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f8301126120e957600080fd5b813567ffffffffffffffff81111561210357612103611be2565b61213460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611cca565b81815284602083860101111561214957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561217857600080fd5b612180611ca7565b905061218b82611e6c565b815261219960208301611e95565b6020820152604082013580151581146121b157600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121da57600080fd5b6121e6848285016120d8565b60808301525060a09182013591810191909152919050565b600060e0823603121561221057600080fd5b612218611c7e565b82358152602083013567ffffffffffffffff81111561223657600080fd5b61224236828601612166565b6020830152506122553660408501611d8c565b604082015261226660a08401611e6c565b6060820152611fa360c08401611e95565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c7457600080fd5b6000610c1d3683612166565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261231660c0850182611a23565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261234f60608401826122b7565b949350505050565b60006020828403121561236957600080fd5b5051919050565b60006020828403121561238257600080fd5b611a8082611e6c565b6000845161239d8184602089016119ff565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123d78160018401602089016119ff565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516124158160028401602088016119ff565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261245757600080fd5b83018035915067ffffffffffffffff82111561247257600080fd5b6020019150600581901b360382131561199d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124bf57600080fd5b83018035915067ffffffffffffffff8211156124da57600080fd5b602001915060608102360382131561199d57600080fd5b60006060828403121561250357600080fd5b611a808383611d8c565b60006020828403121561251f57600080fd5b611a8082611e95565b6000612536611e1484611d19565b8381526020810190600585901b84013681111561255257600080fd5b845b81811015611bbb57803567ffffffffffffffff81111561257357600080fd5b61257f36828901612166565b85525060209384019301612554565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612079577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612667577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526126518486516122b7565b6020958601959094509290920191600101612617565b5091975050506020948501949290920191506001016125b6565b60006020828403121561269357600080fd5b815167ffffffffffffffff8111156126aa57600080fd5b8201601f810184136126bb57600080fd5b80516126c9611e1482611d19565b8082825260208201915060208360051b8501019250868311156126eb57600080fd5b6020840193505b8284101561270d5783518252602093840193909101906126f2565b9695505050505050565b600061010082840312801561272b57600080fd5b50612734611c7e565b823581526127458460208501611d3d565b60208201526127578460608501611d8c565b604082015261276860c08401611e6c565b606082015261277960e08401611e95565b60808201529392505050565b60006040828403121561279757600080fd5b611a808383611d3d565b60008251611c748184602087016119ff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081a000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll/.chainId",
    "content": "534352\n"
  },
  {
    "path": "deployments/scroll/.migrations.json",
    "content": "{\n  \"000001-registry\": 1701717190,\n  \"000002-eas\": 1701717198,\n  \"000003-register-initial-schemas\": 1701717560,\n  \"000004-name-initial-schemas\": 1701717948,\n  \"000005-eip712-proxy\": 1701717959,\n  \"000006-indexer\": 1701717967\n}"
  },
  {
    "path": "deployments/scroll/EAS.json",
    "content": "{\n  \"address\": \"0xC47300428b6AD2c7D03BB76D05A176058b47E6B0\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5393a7cb7580b6376ace8f8ab18fb210cd690a12794cd80bd7245f1cc2683029\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x59ed9Db97D36DB03Ccf1602BbaF242f8529e39af\",\n    \"contractAddress\": \"0xC47300428b6AD2c7D03BB76D05A176058b47E6B0\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"4149084\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xec1145c867c1e77b72488ce1ca7f9dcd17c1b0f5c5102f799680f69dff7e5790\",\n    \"transactionHash\": \"0x5393a7cb7580b6376ace8f8ab18fb210cd690a12794cd80bd7245f1cc2683029\",\n    \"logs\": [],\n    \"blockNumber\": 1317868,\n    \"cumulativeGasUsed\": \"4310587\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0ccad8feb72c73528fddde76e00bd7717233711079e744165e34312169f85684\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8a6310b2a5d70bfd849fbf470507a545df5fb4934b59cd95337014ba017e485a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6959,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6963,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3954,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\"\n      },\n      {\n        \"astId\": 3958,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3964,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3848_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3848_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3829,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3831,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3833,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3835,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3837,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3839,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3841,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3843,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3845,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3847,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x77b7DA1c40762Cd8AFfE2069b575328EfD4D9801\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb890d23ffa72b1d613c6b391c3924d99501090fc27f201a1922081b74e224461\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x59ed9Db97D36DB03Ccf1602BbaF242f8529e39af\",\n    \"contractAddress\": \"0x77b7DA1c40762Cd8AFfE2069b575328EfD4D9801\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2310035\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x50531b45b82d0cb46a23487731644a4164ca576280197bc0630a64431a7ef84b\",\n    \"transactionHash\": \"0xb890d23ffa72b1d613c6b391c3924d99501090fc27f201a1922081b74e224461\",\n    \"logs\": [],\n    \"blockNumber\": 1318112,\n    \"cumulativeGasUsed\": \"2331035\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xC47300428b6AD2c7D03BB76D05A176058b47E6B0\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7363,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7367,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7371,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll/Indexer.json",
    "content": "{\n  \"address\": \"0x8314bc1B2f7F286cb4f0323FE7119C0F99D4A083\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x43c60d062a994dc4466a4f0d733bee95fbdb281bbade6cf49481d5d54002073e\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x59ed9Db97D36DB03Ccf1602BbaF242f8529e39af\",\n    \"contractAddress\": \"0x8314bc1B2f7F286cb4f0323FE7119C0F99D4A083\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"981039\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x3629b1d84648a67c62964f8d554c55d176f8f82beb9a2252c8873341e387f568\",\n    \"transactionHash\": \"0x43c60d062a994dc4466a4f0d733bee95fbdb281bbade6cf49481d5d54002073e\",\n    \"logs\": [],\n    \"blockNumber\": 1318114,\n    \"cumulativeGasUsed\": \"1331347\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xC47300428b6AD2c7D03BB76D05A176058b47E6B0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6211,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6227,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6232,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6236,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf1c373530a09091824669263b0b8062f9befc42df991f7a7b70d3a49da1a8522\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x59ed9Db97D36DB03Ccf1602BbaF242f8529e39af\",\n    \"contractAddress\": \"0xD2CDF46556543316e7D34e8eDc4624e2bB95e3B6\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"631718\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xfdacab00640a205b4453319deb79ae3e3cad339246e45c03f0b762ad324fa0b9\",\n    \"transactionHash\": \"0xf1c373530a09091824669263b0b8062f9befc42df991f7a7b70d3a49da1a8522\",\n    \"logs\": [],\n    \"blockNumber\": 1317865,\n    \"cumulativeGasUsed\": \"631718\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba2bb65a85b07bd4b0dce71c2603601d264f9fae7f10aa0a90849196df5f2b2a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6749,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)6131_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)8351\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)6131_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)6131_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)6131_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 6123,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 6126,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)8351\"\n          },\n          {\n            \"astId\": 6128,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 6130,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/.chainId",
    "content": "534351\n"
  },
  {
    "path": "deployments/scroll-sepolia/.migrations.json",
    "content": "{\n  \"000001-registry\": 1701365148,\n  \"000002-eas\": 1701365159,\n  \"000003-register-initial-schemas\": 1701365446,\n  \"000004-name-initial-schemas\": 1701365734,\n  \"000005-eip712-proxy\": 1701365744,\n  \"000006-indexer\": 1701365771,\n  \"000100-test-seed\": 1701365890\n}"
  },
  {
    "path": "deployments/scroll-sepolia/EAS.json",
    "content": "{\n  \"address\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x0874360da7df381eb9fe03ec98ea7bb47f119dfce5e73e3eca1a92f0e2f7b481\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"4149084\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd10cdef5136c4e0e9e8c5ecffe61bb033f9ead4bbdd96aa3b3b32e4b66e1299c\",\n    \"transactionHash\": \"0x0874360da7df381eb9fe03ec98ea7bb47f119dfce5e73e3eca1a92f0e2f7b481\",\n    \"logs\": [],\n    \"blockNumber\": 2436142,\n    \"cumulativeGasUsed\": \"4184261\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    Signature,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0ccad8feb72c73528fddde76e00bd7717233711079e744165e34312169f85684\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8a6310b2a5d70bfd849fbf470507a545df5fb4934b59cd95337014ba017e485a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6959,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 6963,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 3954,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\"\n      },\n      {\n        \"astId\": 3958,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 3964,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)3848_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)3848_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)3848_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 3829,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3831,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3833,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3835,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3837,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 3839,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 3841,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3843,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 3845,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 3847,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll-sepolia/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x989efb3ba6bf501709b53bdbdba77bface9cb5c3b57512b4749041d6550f1257\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xB3574f76b1720E61FdA98702c7016674CD6Eaa7b\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"2310035\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x16340dfbddf8cc3f15efd3439ec510dc03617ecf7f23f1320c8eb05e34d61139\",\n    \"transactionHash\": \"0x989efb3ba6bf501709b53bdbdba77bface9cb5c3b57512b4749041d6550f1257\",\n    \"logs\": [],\n    \"blockNumber\": 2436273,\n    \"cumulativeGasUsed\": \"2310035\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 3, 0) EIP712(name, \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3f53a2d767500d3d2f130b578d8520f24b9d2806a0cdaba0cc13185a6595c9f3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7363,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7367,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7371,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll-sepolia/Indexer.json",
    "content": "{\n  \"address\": \"0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xe032af879be08aa24aa8f025f610740d9b200ad072211328c3ec2da4060c0ba5\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"981039\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x22cd32054fd674da52236310d532784576a335c062b303e1dbe4084cb5f566db\",\n    \"transactionHash\": \"0xe032af879be08aa24aa8f025f610740d9b200ad072211328c3ec2da4060c0ba5\",\n    \"logs\": [],\n    \"blockNumber\": 2436275,\n    \"cumulativeGasUsed\": \"981039\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x242e0203b314c8539fd4ad3c1f0b7a9c1178fe55b223f4bc007eb9cbf271854c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa103ed4190fd3752095c9663077a98db862624fbf61499cbc5f943cb717ce510\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6211,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6227,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6232,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6236,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll-sepolia/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xaf1e9fa37d40697cdc19fd556393bfbe86fcaadd6d51c6ed61568972a6dcb180\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x55D26f9ae0203EF95494AE4C170eD35f4Cf77797\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"631718\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xe18152bec52fbd3cb57603beb49a55005e2742b7f7b6170bbe61de9740ce84c5\",\n    \"transactionHash\": \"0xaf1e9fa37d40697cdc19fd556393bfbe86fcaadd6d51c6ed61568972a6dcb180\",\n    \"logs\": [],\n    \"blockNumber\": 2436140,\n    \"cumulativeGasUsed\": \"631718\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"e8a8691b768c948a0678c06e528c2eba\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba2bb65a85b07bd4b0dce71c2603601d264f9fae7f10aa0a90849196df5f2b2a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb26a2b03bed18631e2195fa6331167604fdc2672563c4daf87209d07fa1aaaba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"../ISemver.sol\\\\\\\";\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x479f39f03425df5385d790cd2c7447b8250aeb9733d13029d3da8c5982b6604b\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6749,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)6131_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)8351\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)6131_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)6131_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)6131_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 6123,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 6126,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)8351\"\n          },\n          {\n            \"astId\": 6128,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 6130,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/scroll-sepolia/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162004e7a38038062004e7a83398101604081905262000035916200020c565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c0819052909190829082906200008f90839062000187565b61018052620000a081600162000187565b6101a052815160208084019190912061014052815190820120610160524661010052620001316101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526002620001498382620002e3565b5050506001600160a01b03811662000174576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c05262000424565b6000602083511015620001a7576200019f83620001c0565b9050620001ba565b81620001b48482620002e3565b5060ff90505b92915050565b600080829050601f81511115620001f7578260405163305a27a960e01b8152600401620001ee9190620003af565b60405180910390fd5b80516200020482620003ff565b179392505050565b6000602082840312156200021f57600080fd5b81516001600160a01b03811681146200023757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620003de57858101830151858201604001528201620003c0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200028a5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149c1620004b960003960008181610538015281816116030152611f3b01526000610d4f01526000610d25015260006129c40152600061299c015260006128f7015260006129210152600061294b01526000610c3401526000610c0b01526000610be201526149c16000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a93660046137ef565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046137ef565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061389f565b34801561025957600080fd5b506101df6102683660046138eb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e366004613908565b6107e3565b6102b66102b13660046137ef565b6108e6565b6040516101e99190613943565b6101ae6102d1366004613987565b610a67565b6101ae6102e43660046137ef565b610aeb565b3480156102f557600080fd5b5061021261030436600461399f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461399f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e997969594939291906139f3565b6102b66103743660046137ef565b610dbb565b34801561038557600080fd5b5061039961039436600461399f565b61102e565b6040516101e99190613b63565b6101ae6103b4366004613b76565b6111f0565b3480156103c557600080fd5b506102126103d4366004613b89565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461399f565b611295565b34801561047257600080fd5b5061021261048136600461399f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461399f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f73660046137ef565b6112a3565b34801561050857600080fd5b506101df6112db565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613bb5565b6112ea565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613bf0565b90506020028101906105cd9190613c1f565b6105d690613eb5565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613bf0565b602002602001015181526020018660400151848151811061068257610682613bf0565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506113a8565b60010161062d565b506106e483600001518385606001518a886115ba565b6106ee9088613fdf565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613bf0565b9050602002013585611c0b565b600101610712565b50909150505b92915050565b60606002805461076090613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613ff2565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614161565b611d0a565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141dc565b61088490614210565b8160008151811061089757610897613bf0565b60209081029190910101526108c08335826108b860c0870160a088016138eb565b346001611e95565b602001516000815181106108d6576108d6613bf0565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c5d565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613bf0565b9050602002810190610991919061421c565b90506109a06020820182614250565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614250565b6109f8916142b8565b338887611e95565b8051909150610a0f9086613fdf565b94508060200151878581518110610a2857610a28613bf0565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c83836125c8565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab93683900383016020840161432c565b81600081518110610acc57610acc613bf0565b6020908102919091010152610ae6823582333460016115ba565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613bf0565b9050602002810190610b42919061421c565b9050610baf8135610b566020840184614348565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b936040830286013681900381019061432c565b81526020019060010190610b76565b50505050503388866115ba565b610bb99086613fdf565b94505050610bc78160010190565b9050610af0565b60004261074b83826126b2565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612774565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612774565b610c587f0000000000000000000000000000000000000000000000000000000000000000612774565b604051602001610c6a939291906143b0565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608082808083610d4a7f000000000000000000000000000000000000000000000000000000000000000083612832565b610d757f00000000000000000000000000000000000000000000000000000000000000006001612832565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610dd957610dd9613c5d565b604051908082528060200260200182016040528015610e0c57816020015b6060815260200190600190039081610df75790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e5457610e54613bf0565b9050602002810190610e669190613c1f565b9050366000610e786020840184614250565b909250905080801580610e995750610e936040850185614426565b90508114155b15610ed0576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610fb157610fa96040518060a0016040528087600001358152602001868685818110610f0557610f05613bf0565b9050602002810190610f1791906141dc565b610f2090614210565b8152602001610f326040890189614426565b85818110610f4257610f42613bf0565b905060600201803603810190610f58919061448d565b8152602001610f6d6080890160608a016138eb565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f9860a0890160808a016144a9565b67ffffffffffffffff169052611d0a565b600101610ed3565b506000610fda8535610fc385876142b8565b610fd36080890160608a016138eb565b8b8a611e95565b8051909150610fe99089613fdf565b975080602001518a888151811061100257611002613bf0565b6020026020010181905250806020015151890198505050505050506110278160010190565b9050610e14565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061116790613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461119390613ff2565b80156111e05780601f106111b5576101008083540402835291602001916111e0565b820191906000526020600020905b8154815290600101906020018083116111c357829003601f168201915b5050505050815250509050919050565b611207611202368390038301836144c4565b6113a8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161121e5790505090506112593683900383016020840161432c565b8160008151811061126c5761126c613bf0565b6020908102919091010152610ae682358261128d60e0860160c087016138eb565b3460016115ba565b60004261074b338483611c0b565b60004282825b81811015610745576112d38686838181106112c6576112c6613bf0565b90506020020135846126b2565b6001016112a9565b60006112e56128dd565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161130457905050905061137260208401846141dc565b61137b90614210565b8160008151811061138e5761138e613bf0565b60209081029190910101526108c083358233346001611e95565b608081015167ffffffffffffffff16158015906113dc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611413576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff8416600090815260039098529487208054969794969495611508957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75959493928861148b83614532565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612a15565b905061157e84606001518284602001518560400151866000015160405160200161156a93929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612a5d565b6115b4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa15801561164a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611690919081019061456a565b80519091506116cb576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116e8576116e8613c5d565b60405190808252806020026020018201604052801561178757816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117065790505b50905060008267ffffffffffffffff8111156117a5576117a5613c5d565b6040519080825280602002602001820160405280156117ce578160200160208202803683370190505b50905060005b83811015611bed5760008a82815181106117f0576117f0613bf0565b6020908102919091018101518051600090815260049092526040909120805491925090611849576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611886576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146118dc576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff16611932576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561198c576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a9890613ff2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac490613ff2565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b505050505081525050858481518110611b2c57611b2c613bf0565b60200260200101819052508160200151848481518110611b4e57611b4e613bf0565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b8457611b84613bf0565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611bdb91815260200190565b60405180910390a450506001016117d4565b50611bfd84838360018b8b612ad8565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c7f576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611d3e57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d75576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a9899611508997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611e0683614532565b919050558e608001516040516020016114ed9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611eda57611eda613c5d565b604051908082528060200260200182016040528015611f03578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fdd919081019061456a565b8051909150612018576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff81111561203357612033613c5d565b6040519080825280602002602001820160405280156120d257816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816120515790505b50905060008467ffffffffffffffff8111156120f0576120f0613c5d565b604051908082528060200260200182016040528015612119578160200160208202803683370190505b50905060005b858110156125a75760008b828151811061213b5761213b613bf0565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561218657504267ffffffffffffffff16816020015167ffffffffffffffff1611155b156121bd576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001511580156121d0575080604001515b15612207576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f815260200161222b4290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122cd8382612ec7565b600081815260046020526040902054909250156122ec576001016122c3565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009091169290931691909117919091179055610120840151849190600682019061246b9082614690565b5050506060840151156124c25760608401516000908152600460205260409020546124c2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828786815181106124d5576124d5613bf0565b60200260200101819052508360a001518686815181106124f7576124f7613bf0565b602002602001018181525050818960200151868151811061251a5761251a613bf0565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161258a91815260200190565b60405180910390a4505050506125a08160010190565b905061211f565b506125b783838360008c8c612ad8565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125e5576125e5613c5d565b60405190808252806020026020018201604052801561260e578160200160208202803683370190505b508451909150600090815b818110156126a757600087828151811061263557612635613bf0565b6020026020010151905060008151905060005b818110156126935782818151811061266257612662613bf0565b602002602001015187878151811061267c5761267c613bf0565b602090810291909101015260019586019501612648565b5050506126a08160010190565b9050612619565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff1615612702576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061278183612f26565b600101905060008167ffffffffffffffff8111156127a1576127a1613c5d565b6040519080825280601f01601f1916602001820160405280156127cb576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846127d557509392505050565b606060ff831461284c5761284583613008565b905061074b565b81805461285890613ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461288490613ff2565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905061074b565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561294357507f000000000000000000000000000000000000000000000000000000000000000046145b1561296d57507f000000000000000000000000000000000000000000000000000000000000000090565b6112e5604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b612a226128dd565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000612a6c8585613047565b90925090506000816004811115612a8557612a856147aa565b148015612abd57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ace5750612ace86868661308c565b9695505050505050565b84516000906001819003612b3057612b288888600081518110612afd57612afd613bf0565b602002602001015188600081518110612b1857612b18613bf0565b60200260200101518888886131e9565b915050612ace565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612bd15760005b82811015612bb657878181518110612b6d57612b6d613bf0565b6020026020010151600014612bae576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612b53565b508315612bc657612bc685613508565b600092505050612ace565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4391906147d9565b905060005b84811015612d005760008a8281518110612c6457612c64613bf0565b6020026020010151905080600003612c7c5750612cf8565b82612cb3576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612ced576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612c48565b508715612ddb576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612d5d908e908e906004016147f6565b60206040518083038185885af1158015612d7b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612da091906147d9565b612dd6576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eaa565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612e31908e908e906004016147f6565b60206040518083038185885af1158015612e4f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e7491906147d9565b612eaa576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612eb957612eb987613508565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612f0899989796918c910161488a565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612f6f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f9b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612fb957662386f26fc10000830492506010015b6305f5e1008310612fd1576305f5e100830492506008015b6127108310612fe557612710830492506004015b60648310612ff7576064830492506002015b600a831061074b5760010192915050565b606060006130158361351b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080825160410361307d5760208301516040840151606085015160001a6130718782858561355c565b94509450505050613085565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016130c3929190614968565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161314c9190614989565b600060405180830381855afa9150503d8060008114613187576040519150601f19603f3d011682016040523d82523d6000602084013e61318c565b606091505b50915091508180156131a057506020815110155b8015612ace575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131de908301602090810190840161499b565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661325d578515613244576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156132535761325384613508565b6000915050612ace565b8515613348578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147d9565b613308576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613342576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b8415613420576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e19088906133a2908b90600401613b63565b60206040518083038185885af11580156133c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133e591906147d9565b61341b576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ed565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613474908b90600401613b63565b60206040518083038185885af1158015613492573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b791906147d9565b6134ed576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134fc576134fc84613508565b50939695505050505050565b801561351857613518338261364b565b50565b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135935750600090506003613642565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135e7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661363b57600060019250925050613642565b9150600090505b94509492505050565b804710156136ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613714576040519150601f19603f3d011682016040523d82523d6000602084013e613719565b606091505b5050905080610ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016136b1565b60008083601f8401126137bc57600080fd5b50813567ffffffffffffffff8111156137d457600080fd5b6020830191508360208260051b850101111561308557600080fd5b6000806020838503121561380257600080fd5b823567ffffffffffffffff81111561381957600080fd5b613825858286016137aa565b90969095509350505050565b60005b8381101561384c578181015183820152602001613834565b50506000910152565b6000815180845261386d816020860160208601613831565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138b26020830184613855565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461351857600080fd5b80356138e6816138b9565b919050565b6000602082840312156138fd57600080fd5b81356138b2816138b9565b60006020828403121561391a57600080fd5b813567ffffffffffffffff81111561393157600080fd5b820160e081850312156138b257600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561397b5783518352928401929184019160010161395f565b50909695505050505050565b60006060828403121561399957600080fd5b50919050565b6000602082840312156139b157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156139e8578151875295820195908201906001016139cc565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000613a2e60e0830189613855565b8281036040840152613a408189613855565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bfd81856139b8565b600061014082518452602083015160208501526040830151613aaa604086018267ffffffffffffffff169052565b506060830151613ac6606086018267ffffffffffffffff169052565b506080830151613ae2608086018267ffffffffffffffff169052565b5060a083015160a085015260c0830151613b1460c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0830151613b3c60e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612ace83870182613855565b6020815260006138b26020830184613a7c565b6000610100828403121561399957600080fd5b60008060408385031215613b9c57600080fd5b8235613ba7816138b9565b946020939093013593505050565b600060208284031215613bc757600080fd5b813567ffffffffffffffff811115613bde57600080fd5b8201604081850312156138b257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c5357600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b60405290565b60405160c0810167ffffffffffffffff81118282101715613caf57613caf613c5d565b6040516080810167ffffffffffffffff81118282101715613caf57613caf613c5d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4257613d42613c5d565b604052919050565b600067ffffffffffffffff821115613d6457613d64613c5d565b5060051b60200190565b600060408284031215613d8057600080fd5b6040516040810181811067ffffffffffffffff82111715613da357613da3613c5d565b604052823581526020928301359281019290925250919050565b600060608284031215613dcf57600080fd5b6040516060810181811067ffffffffffffffff82111715613df257613df2613c5d565b604052905080823560ff81168114613e0957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613e3957600080fd5b81356020613e4e613e4983613d4a565b613cfb565b82815260609283028501820192828201919087851115613e6d57600080fd5b8387015b85811015613e9057613e838982613dbd565b8452928401928101613e71565b5090979650505050505050565b803567ffffffffffffffff811681146138e657600080fd5b600060a08236031215613ec757600080fd5b613ecf613c8c565b8235815260208084013567ffffffffffffffff80821115613eef57600080fd5b9085019036601f830112613f0257600080fd5b8135613f10613e4982613d4a565b81815260069190911b83018401908481019036831115613f2f57600080fd5b938501935b82851015613f5857613f463686613d6e565b82528582019150604085019450613f34565b80868801525050506040860135925080831115613f7457600080fd5b5050613f8236828601613e28565b604083015250613f94606084016138db565b6060820152613fa560808401613e9d565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613fb0565b600181811c9082168061400657607f821691505b602082108103613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b801515811461351857600080fd5b600067ffffffffffffffff82111561406757614067613c5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c082840312156140a557600080fd5b6140ad613cb5565b905081356140ba816138b9565b815260206140c9838201613e9d565b8183015260408301356140db8161403f565b604083015260608381013590830152608083013567ffffffffffffffff81111561410457600080fd5b8301601f8101851361411557600080fd5b8035614123613e498261404d565b818152868483850101111561413757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e0823603121561417357600080fd5b61417b613c8c565b82358152602083013567ffffffffffffffff81111561419957600080fd5b6141a536828601614093565b6020830152506141b83660408501613dbd565b604082015260a08301356141cb816138b9565b6060820152613fa560c08401613e9d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c5357600080fd5b600061074b3683614093565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c5357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261428557600080fd5b83018035915067ffffffffffffffff8211156142a057600080fd5b6020019150600581901b360382131561308557600080fd5b60006142c6613e4984613d4a565b80848252602080830192508560051b8501368111156142e457600080fd5b855b8181101561432057803567ffffffffffffffff8111156143065760008081fd5b61431236828a01614093565b8652509382019382016142e6565b50919695505050505050565b60006040828403121561433e57600080fd5b6138b28383613d6e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261437d57600080fd5b83018035915067ffffffffffffffff82111561439857600080fd5b6020019150600681901b360382131561308557600080fd5b600084516143c2818460208901613831565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143fe816001850160208a01613831565b60019201918201528351614419816002840160208801613831565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261445b57600080fd5b83018035915067ffffffffffffffff82111561447657600080fd5b602001915060608102360382131561308557600080fd5b60006060828403121561449f57600080fd5b6138b28383613dbd565b6000602082840312156144bb57600080fd5b6138b282613e9d565b600061010082840312156144d757600080fd5b6144df613c8c565b823581526144f08460208501613d6e565b60208201526145028460608501613dbd565b604082015260c0830135614515816138b9565b606082015261452660e08401613e9d565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361456357614563613fb0565b5060010190565b6000602080838503121561457d57600080fd5b825167ffffffffffffffff8082111561459557600080fd5b90840190608082870312156145a957600080fd5b6145b1613cd8565b82518152838301516145c2816138b9565b8185015260408301516145d48161403f565b60408201526060830151828111156145eb57600080fd5b80840193505086601f84011261460057600080fd5b82519150614610613e498361404d565b828152878584860101111561462457600080fd5b61463383868301878701613831565b60608201529695505050505050565b601f821115610ae657600081815260208120601f850160051c810160208610156146695750805b601f850160051c820191505b8181101561468857828155600101614675565b505050505050565b815167ffffffffffffffff8111156146aa576146aa613c5d565b6146be816146b88454613ff2565b84614642565b602080601f83116001811461471157600084156146db5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614688565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561475e5788860151825594840194600190910190840161473f565b508582101561479a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147eb57600080fd5b81516138b28161403f565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561486b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018552614859868351613a7c565b9550938201939082019060010161481f565b50508584038187015250505061488181856139b8565b95945050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b60588301528460598301528351614923816079850160208801613831565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a9950505050505050505050565b8281526040602082015260006149816040830184613855565b949350505050565b60008251613c53818460208701613831565b6000602082840312156149ad57600080fd5b505191905056fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e060405234801561001057600080fd5b506001608052600360a052600060c05260805160a05160c051610a8461004c600039600060fe0152600060d50152600060ac0152610a846000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b61007761007236600461069d565b610148565b60405190815260200161005b565b61009861009336600461074f565b61030c565b60405161005b9190610768565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107c1565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af9082610908565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610768565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610866565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610866565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610837565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a22565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b600080600080606085870312156106b357600080fd5b843567ffffffffffffffff808211156106cb57600080fd5b818701915087601f8301126106df57600080fd5b8135818111156106ee57600080fd5b88602082850101111561070057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461072f57600080fd5b91506040850135801515811461074457600080fd5b939692955090935050565b60006020828403121561076157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107b960a0840182610639565b949350505050565b600084516107d3818460208901610615565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161080f816001850160208a01610615565b6001920191820152835161082a816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061087a57607f821691505b6020821081036108b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561090357600081815260208120601f850160051c810160208610156108e05750805b601f850160051c820191505b818110156108ff578281556001016108ec565b5050505b505050565b815167ffffffffffffffff81111561092257610922610837565b610936816109308454610866565b846108b9565b602080601f83116001811461098957600084156109535750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556108ff565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156109d6578886015182559484019460019091019084016109b7565b5085821015610a1257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451610a34818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/scroll-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/sepolia/.chainId",
    "content": "11155111\n"
  },
  {
    "path": "deployments/sepolia/.migrations.json",
    "content": "{\n  \"000001-registry\": 1677138964,\n  \"000002-eas\": 1677138984,\n  \"000003-register-initial-schemas\": 1677139251,\n  \"000004-name-initial-schemas\": 1677139550,\n  \"000005-eip712-proxy\": 1698797280,\n  \"000006-indexer\": 1698792410,\n  \"000100-test-seed\": 1677139824\n}\n"
  },
  {
    "path": "deployments/sepolia/EAS.json",
    "content": "{\n  \"address\": \"0xC2679fBD37d54388Ce493F1DB75320D236e1815e\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x3bf3cf413a67070229f435645c00e0902b1be926157500d8d474ff8e96c5dffc\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x01a93612f26100B6E18a2e3dd57df5c3ccaFeca1\",\n    \"contractAddress\": \"0xC2679fBD37d54388Ce493F1DB75320D236e1815e\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"4349707\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x5fbc93dc9669ff02da9a9b31344259accb5180d93e7927bdd23baa991ada5be5\",\n    \"transactionHash\": \"0x3bf3cf413a67070229f435645c00e0902b1be926157500d8d474ff8e96c5dffc\",\n    \"logs\": [],\n    \"blockNumber\": 2958571,\n    \"cumulativeGasUsed\": \"7608274\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\"0x0a7E2Ff54e76B8E6659aedc9103FB21c038050D0\"],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"a71fe784ec2ddd03c0373182f6192f42\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct EIP712Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"details\\\":\\\"Emitted when an attestation has been made.\\\",\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"details\\\":\\\"Emitted when an attestation has been revoked.\\\",\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"details\\\":\\\"Emitted when a data has been revoked.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"details\\\":\\\"Emitted when a data has been timestamped.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"details\\\":\\\"Attests to a specific schema.\\\",\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request. Example: attest({     schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",     data: {         recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",         expirationTime: 0,         revocable: true,         refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",         data: \\\\\\\"0xF00D\\\\\\\",         value: 0     } })\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation.\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\\\":{\\\"details\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\",\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request. Example: attestByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     signature: {         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e' })\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation.\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"details\\\":\\\"Returns an existing attestation by UID.\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"details\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getNonce(address)\\\":{\\\"details\\\":\\\"Returns the current nonce per-account.\\\",\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"details\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"details\\\":\\\"Returns the address of the global schema registry.\\\",\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"details\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"details\\\":\\\"Checks whether an attestation exists.\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"details\\\":\\\"Attests to multiple schemas.\\\",\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttest([{     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 1000     },     {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 0,         revocable: false,         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',         data: '0x00',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: true,         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',         data: '0x12345678',         value: 0     }, }])\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations.\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\\\":{\\\"details\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\",\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttestByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     {         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: false,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x00',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4' }])\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations.\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"details\\\":\\\"Revokes existing attestations to multiple schemas.\\\",\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevoke([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',         value: 0     }, }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\\\":{\\\"details\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\",\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"details\\\":\\\"Revokes the specified multiple bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"details\\\":\\\"Timestamps the specified multiple bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"details\\\":\\\"Revokes an existing attestation to a specific schema. Example: revoke({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',         value: 0     } })\\\",\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request.\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\\\":{\\\"details\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature. Example: revokeByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',         value: 0     },     signature: {         v: 27,         r: '0xb593...7142',         s: '0x0f5b...2cce'     },     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' })\\\",\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request.\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"details\\\":\\\"Revokes the specified bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"details\\\":\\\"Timestamps the specified bytes32 data.\\\",\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}}},\\\"title\\\":\\\"EAS - Ethereum Attestation Service\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        bytes32 r,\\\\n        bytes32 vs\\\\n    ) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(\\\\n        bytes32 hash,\\\\n        bytes32 r,\\\\n        bytes32 vs\\\\n    ) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", hash));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\", domainSeparator, structHash));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * _Available since v3.4._\\\\n */\\\\nabstract contract EIP712 {\\\\n    /* solhint-disable var-name-mixedcase */\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\\\n    uint256 private immutable _CACHED_CHAIN_ID;\\\\n    address private immutable _CACHED_THIS;\\\\n\\\\n    bytes32 private immutable _HASHED_NAME;\\\\n    bytes32 private immutable _HASHED_VERSION;\\\\n    bytes32 private immutable _TYPE_HASH;\\\\n\\\\n    /* solhint-enable var-name-mixedcase */\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        bytes32 hashedName = keccak256(bytes(name));\\\\n        bytes32 hashedVersion = keccak256(bytes(version));\\\\n        bytes32 typeHash = keccak256(\\\\n            \\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\"\\\\n        );\\\\n        _HASHED_NAME = hashedName;\\\\n        _HASHED_VERSION = hashedVersion;\\\\n        _CACHED_CHAIN_ID = block.chainid;\\\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\\\n        _CACHED_THIS = address(this);\\\\n        _TYPE_HASH = typeHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\\\n            return _CACHED_DOMAIN_SEPARATOR;\\\\n        } else {\\\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator(\\\\n        bytes32 typeHash,\\\\n        bytes32 nameHash,\\\\n        bytes32 versionHash\\\\n    ) private view returns (bytes32) {\\\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(\\\\n        uint256 x,\\\\n        uint256 y,\\\\n        uint256 denominator\\\\n    ) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1);\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(\\\\n        uint256 x,\\\\n        uint256 y,\\\\n        uint256 denominator,\\\\n        Rounding rounding\\\\n    ) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10**64) {\\\\n                value /= 10**64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10**32) {\\\\n                value /= 10**32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10**16) {\\\\n                value /= 10**16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10**8) {\\\\n                value /= 10**8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10**4) {\\\\n                value /= 10**4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10**2) {\\\\n                value /= 10**2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10**1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID, EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { EIP712Verifier } from \\\\\\\"./EIP712Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nstruct AttestationsResult {\\\\n    uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n    bytes32[] uids; // UIDs of the new attestations.\\\\n}\\\\n\\\\n/**\\\\n * @title EAS - Ethereum Attestation Service\\\\n */\\\\ncontract EAS is IEAS, EIP712Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AccessDenied();\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidLength();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotFound();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    // The version of the contract.\\\\n    string public constant VERSION = \\\\\\\"0.26\\\\\\\";\\\\n\\\\n    // A zero expiration represents an non-expiring attestation.\\\\n    uint64 private constant NO_EXPIRATION_TIME = 0;\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp)) private _revocationsOffchain;\\\\n\\\\n    /**\\\\n     * @dev Creates a new EAS instance.\\\\n     *\\\\n     * @param registry The address of the global schema registry.\\\\n     */\\\\n    constructor(ISchemaRegistry registry) EIP712Verifier(VERSION) {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function attest(AttestationRequest calldata request) public payable virtual returns (bytes32) {\\\\n        AttestationRequestData[] memory requests = new AttestationRequestData[](1);\\\\n        requests[0] = request.data;\\\\n\\\\n        return _attest(request.schema, requests, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        bytes32[][] memory totalUids = new bytes32[][](multiRequests.length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiRequests.length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        bytes32[][] memory totalUids = new bytes32[][](multiDelegatedRequests.length);\\\\n        uint256 totalUidsCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiDelegatedRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiDelegatedRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            if (data.length == 0 || data.length != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < data.length; ) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester\\\\n                    })\\\\n                );\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                }\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUids[i] = res.uids;\\\\n            unchecked {\\\\n                totalUidsCount += res.uids.length;\\\\n            }\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUids, totalUidsCount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revoke(RevocationRequest calldata request) public payable virtual {\\\\n        RevocationRequestData[] memory requests = new RevocationRequestData[](1);\\\\n        requests[0] = request.data;\\\\n\\\\n        _revoke(request.schema, requests, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < multiDelegatedRequests.length; ) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == multiDelegatedRequests.length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            if (data.length == 0 || data.length != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < data.length; ) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker\\\\n                    })\\\\n                );\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                }\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            _timestamp(data[i], time);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc IEAS\\\\n     */\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /**\\\\n      * @inheritdoc IEAS\\\\n      */\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema.\\\\n     *\\\\n     * @param schema // the unique identifier of the schema to attest to.\\\\n     * @param data The arguments of the attestation requests.\\\\n     * @param attester The attesting account.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return The UID of the new attestations and the total sent ETH amount.\\\\n     */\\\\n    function _attest(\\\\n        bytes32 schema,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schema);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schema,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != 0) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schema);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema.\\\\n     *\\\\n     * @param schema The unique identifier of the schema to attest to.\\\\n     * @param data The arguments of the revocation requests.\\\\n     * @param revoker The revoking account.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _revoke(\\\\n        bytes32 schema,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schema);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schema) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestation.recipient, revoker, request.uid, attestation.schema);\\\\n\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n     *\\\\n     * @param schemaRecord The schema of the attestation.\\\\n     * @param attestation The data of the attestation to make/revoke.\\\\n     * @param value An explicit ETH amount to send to the resolver.\\\\n     * @param isRevocation Whether to resolve an attestation or its revocation.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0 && !resolver.isPayable()) {\\\\n            revert NotPayable();\\\\n        }\\\\n\\\\n        // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n        if (value > availableValue) {\\\\n            revert InsufficientValue();\\\\n        }\\\\n\\\\n        // Ensure to deduct the sent value explicitly.\\\\n        unchecked {\\\\n            availableValue -= value;\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Resolves multiple attestations or revocations of existing attestations.\\\\n     *\\\\n     * @param schemaRecord The schema of the attestation.\\\\n     * @param attestations The data of the attestations to make/revoke.\\\\n     * @param values Explicit ETH amounts to send to the resolver.\\\\n     * @param isRevocation Whether to resolve an attestation or its revocation.\\\\n     * @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n     * @param last Whether this is the last attestations/revocations set.\\\\n     *\\\\n     * @return Returns the total sent ETH amount.\\\\n     */\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; ) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++i;\\\\n                }\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; ) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value != 0 && !resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Calculates a UID for a given attestation.\\\\n     *\\\\n     * @param attestation The input attestation.\\\\n     * @param bump A bump value to use in case of a UID conflict.\\\\n     *\\\\n     * @return Attestation UID.\\\\n     */\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Refunds remaining ETH amount to the attester.\\\\n     *\\\\n     * @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n     */\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Merges lists of UIDs.\\\\n     *\\\\n     * @param uidLists The provided lists of UIDs.\\\\n     * @param uidsCount Total UIDs count.\\\\n     *\\\\n     * @return A merged and flatten list of all the UIDs.\\\\n     */\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidsCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidsCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        for (uint256 i = 0; i < uidLists.length; ) {\\\\n            bytes32[] memory currentUids = uidLists[i];\\\\n            for (uint256 j = 0; j < currentUids.length; ) {\\\\n                uids[currentIndex] = currentUids[j];\\\\n\\\\n                unchecked {\\\\n                    ++j;\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n            unchecked {\\\\n                ++i;\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     * @param time The timestamp.\\\\n     */\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /**\\\\n         * @dev Timestamps the specified bytes32 data.\\\\n         *\\\\n         * @param data The data to timestamp.\\\\n         * @param time The timestamp.\\\\n         */\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n     * current block time.\\\\n     */\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8b7233cc7377d5d90ccffcd67c93287fda47bcdc92ca0df0b10c22bf35a3f231\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/EIP712Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title EIP712 typed signatures verifier for EAS delegated attestations.\\\\n */\\\\nabstract contract EIP712Verifier is EIP712 {\\\\n    error InvalidSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 nonce)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de61;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 nonce)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address => uint256) private _nonces;\\\\n\\\\n    /**\\\\n     * @dev Creates a new EIP712Verifier instance.\\\\n     *\\\\n     * @param version The current major version of the signing domain\\\\n     */\\\\n    constructor(string memory version) EIP712(\\\\\\\"EAS\\\\\\\", version) {}\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n     */\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the current nonce per-account.\\\\n     *\\\\n     * @param account The requested account.\\\\n     *\\\\n     * @return The current nonce.\\\\n     */\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the EIP712 type hash for the attest function.\\\\n     */\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the EIP712 type hash for the revoke function.\\\\n     */\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Verifies delegated attestation request.\\\\n     *\\\\n     * @param request The arguments of the delegated attestation request.\\\\n     */\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        AttestationRequestData memory data = request.data;\\\\n        EIP712Signature memory signature = request.signature;\\\\n\\\\n        uint256 nonce;\\\\n        unchecked {\\\\n            nonce = _nonces[request.attester]++;\\\\n        }\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    nonce\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Verifies delegated revocation request.\\\\n     *\\\\n     * @param request The arguments of the delegated revocation request.\\\\n     */\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        RevocationRequestData memory data = request.data;\\\\n        EIP712Signature memory signature = request.signature;\\\\n\\\\n        uint256 nonce;\\\\n        unchecked {\\\\n            nonce = _nonces[request.revoker]++;\\\\n        }\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(REVOKE_TYPEHASH, request.schema, data.uid, nonce)));\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x373763eb3fa3bd3a8b7e839bfdc3319fbcd259d1029f227b88121c5450bdfae4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, EIP712Signature } from \\\\\\\"./Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the attestation request.\\\\n */\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the attestation request.\\\\n */\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the full delegated attestation request.\\\\n */\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    EIP712Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the multi attestation request.\\\\n */\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the delegated multi attestation request.\\\\n */\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    EIP712Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the revocation request.\\\\n */\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the revocation request.\\\\n */\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the arguments of the full delegated revocation request.\\\\n */\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    EIP712Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the multi revocation request.\\\\n */\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing the full arguments of the delegated multi revocation request.\\\\n */\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    EIP712Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n}\\\\n\\\\n/**\\\\n * @title EAS - Ethereum Attestation Service interface.\\\\n */\\\\ninterface IEAS {\\\\n    /**\\\\n     * @dev Emitted when an attestation has been made.\\\\n     *\\\\n     * @param recipient The recipient of the attestation.\\\\n     * @param attester The attesting account.\\\\n     * @param uid The UID the revoked attestation.\\\\n     * @param schema The UID of the schema.\\\\n     */\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schema);\\\\n\\\\n    /**\\\\n     * @dev Emitted when an attestation has been revoked.\\\\n     *\\\\n     * @param recipient The recipient of the attestation.\\\\n     * @param attester The attesting account.\\\\n     * @param schema The UID of the schema.\\\\n     * @param uid The UID the revoked attestation.\\\\n     */\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schema);\\\\n\\\\n    /**\\\\n     * @dev Emitted when a data has been timestamped.\\\\n     *\\\\n     * @param data The data.\\\\n     * @param timestamp The timestamp.\\\\n     */\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /**\\\\n     * @dev Emitted when a data has been revoked.\\\\n     *\\\\n     * @param revoker The address of the revoker.\\\\n     * @param data The data.\\\\n     * @param timestamp The timestamp.\\\\n     */\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the global schema registry.\\\\n     *\\\\n     * @return The address of the global schema registry.\\\\n     */\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema.\\\\n     *\\\\n     * @param request The arguments of the attestation request.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * attest({\\\\n     *     schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n     *     data: {\\\\n     *         recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n     *         expirationTime: 0,\\\\n     *         revocable: true,\\\\n     *         refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n     *         data: \\\\\\\"0xF00D\\\\\\\",\\\\n     *         value: 0\\\\n     *     }\\\\n     * })\\\\n     *\\\\n     * @return The UID of the new attestation.\\\\n     */\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Attests to a specific schema via the provided EIP712 signature.\\\\n     *\\\\n     * @param delegatedRequest The arguments of the delegated attestation request.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * attestByDelegation({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     signature: {\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e'\\\\n     * })\\\\n     *\\\\n     * @return The UID of the new attestation.\\\\n     */\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Attests to multiple schemas.\\\\n     *\\\\n     * @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n     * schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiAttest([{\\\\n     *     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n     *     data: [{\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: false,\\\\n     *         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n     *         data: '0x00',\\\\n     *         value: 0\\\\n     *     }],\\\\n     * },\\\\n     * {\\\\n     *     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n     *     data: [{\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n     *         data: '0x12345678',\\\\n     *         value: 0\\\\n     *     },\\\\n     * }])\\\\n     *\\\\n     * @return The UIDs of the new attestations.\\\\n     */\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /**\\\\n     * @dev Attests to multiple schemas using via provided EIP712 signatures.\\\\n     *\\\\n     * @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n     * grouped by distinct schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiAttestByDelegation([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n     *         expirationTime: 1673891048,\\\\n     *         revocable: true,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x1234',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     {\\\\n     *         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n     *         expirationTime: 0,\\\\n     *         revocable: false,\\\\n     *         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n     *         data: '0x00',\\\\n     *         value: 0\\\\n     *     }],\\\\n     *     signatures: [{\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     {\\\\n     *         v: 28,\\\\n     *         r: '0x487s...67bb',\\\\n     *         s: '0x12ad...2366'\\\\n     *     }],\\\\n     *     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4'\\\\n     * }])\\\\n     *\\\\n     * @return The UIDs of the new attestations.\\\\n     */\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * revoke({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n     *         value: 0\\\\n     *     }\\\\n     * })\\\\n     *\\\\n     * @param request The arguments of the revocation request.\\\\n     */\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * revokeByDelegation({\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: {\\\\n     *         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n     *         value: 0\\\\n     *     },\\\\n     *     signature: {\\\\n     *         v: 27,\\\\n     *         r: '0xb593...7142',\\\\n     *         s: '0x0f5b...2cce'\\\\n     *     },\\\\n     *     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992'\\\\n     * })\\\\n     *\\\\n     * @param delegatedRequest The arguments of the delegated revocation request.\\\\n     */\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes existing attestations to multiple schemas.\\\\n     *\\\\n     * @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n     * schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiRevoke([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n     *         value: 0\\\\n     *     }],\\\\n     * },\\\\n     * {\\\\n     *     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n     *     data: [{\\\\n     *         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n     *         value: 0\\\\n     *     },\\\\n     * }])\\\\n     */\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /**\\\\n     * @dev Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n     *\\\\n     * @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests should be\\\\n     * grouped by distinct schema ids to benefit from the best batching optimization.\\\\n     *\\\\n     * Example:\\\\n     *\\\\n     * multiRevokeByDelegation([{\\\\n     *     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n     *     data: [{\\\\n     *         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n     *         value: 1000\\\\n     *     },\\\\n     *     {\\\\n     *         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n     *         value: 0\\\\n     *     }],\\\\n     *     signatures: [{\\\\n     *         v: 28,\\\\n     *         r: '0x148c...b25b',\\\\n     *         s: '0x5a72...be22'\\\\n     *     },\\\\n     *     {\\\\n     *         v: 28,\\\\n     *         r: '0x487s...67bb',\\\\n     *         s: '0x12ad...2366'\\\\n     *     }],\\\\n     *     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992'\\\\n     * }])\\\\n     *\\\\n     */\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Timestamps the specified multiple bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Revokes the specified bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was revoked with.\\\\n     */\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Revokes the specified multiple bytes32 data.\\\\n     *\\\\n     * @param data The data to timestamp.\\\\n     *\\\\n     * @return The timestamp the data was revoked with.\\\\n     */\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing attestation by UID.\\\\n     *\\\\n     * @param uid The UID of the attestation to retrieve.\\\\n     *\\\\n     * @return The attestation data members.\\\\n     */\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /**\\\\n     * @dev Checks whether an attestation exists.\\\\n     *\\\\n     * @param uid The UID of the attestation to retrieve.\\\\n     *\\\\n     * @return Whether an attestation exists.\\\\n     */\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the timestamp that the specified data was timestamped with.\\\\n     *\\\\n     * @param data The data to query.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /**\\\\n     * @dev Returns the timestamp that the specified data was timestamped with.\\\\n     *\\\\n     * @param data The data to query.\\\\n     *\\\\n     * @return The timestamp the data was timestamped with.\\\\n     */\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x77037a2caac190938c12fc150159abc4b59069fa4cb71a7b75f0c3d08a55a419\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title A struct representing a record for a submitted schema.\\\\n */\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/**\\\\n * @title The global schema registry interface.\\\\n */\\\\ninterface ISchemaRegistry {\\\\n    /**\\\\n     * @dev Emitted when a new schema has been registered\\\\n     *\\\\n     * @param uid The schema UID.\\\\n     * @param registerer The address of the account used to register the schema.\\\\n     */\\\\n    event Registered(bytes32 indexed uid, address registerer);\\\\n\\\\n    /**\\\\n     * @dev Submits and reserves a new schema\\\\n     *\\\\n     * @param schema The schema data schema.\\\\n     * @param resolver An optional schema resolver.\\\\n     * @param revocable Whether the schema allows revocations explicitly.\\\\n     *\\\\n     * @return The UID of the new schema.\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing schema by UID\\\\n     *\\\\n     * @param uid The UID of the schema to retrieve.\\\\n     *\\\\n     * @return The schema data members.\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef47e449dd02bd034e26b1dea505ce533906f8462fc674c938ed0e872a68d640\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Types.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n/**\\\\n * @dev A struct representing EIP712 signature data.\\\\n */\\\\nstruct EIP712Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing a single attestation.\\\\n */\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x547096b5cb7bfad9591bdc520705f8110534cd040ed0f7a0ba8d83ea4a565b45\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The interface of an optional schema resolver.\\\\n */\\\\ninterface ISchemaResolver {\\\\n    /**\\\\n     * @dev Returns whether the resolver supports ETH transfers.\\\\n     */\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation and verifies whether it's valid.\\\\n     *\\\\n     * @param attestation The new attestation.\\\\n     *\\\\n     * @return Whether the attestation is valid.\\\\n     */\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes multiple attestations and verifies whether they are valid.\\\\n     *\\\\n     * @param attestations The new attestations.\\\\n     * @param values Explicit ETH amounts which were sent with each attestation.\\\\n     *\\\\n     * @return Whether all the attestations are valid.\\\\n     */\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation revocation and verifies if it can be revoked.\\\\n     *\\\\n     * @param attestation The existing attestation to be revoked.\\\\n     *\\\\n     * @return Whether the attestation can be revoked.\\\\n     */\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes revocation of multiple attestation and verifies they can be revoked.\\\\n     *\\\\n     * @param attestations The existing attestations to be revoked.\\\\n     * @param values Explicit ETH amounts which were sent with each revocation.\\\\n     *\\\\n     * @return Whether the attestations can be revoked.\\\\n     */\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0f3a75c28cdb91fa9227a6eef183379ecea2b6bf38db52795b5c4e6af79299e8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61016034620001b657601f62004fdb38819003918201601f19168301926001600160401b0392909183851183861017620001a0578160209284926040978852833981010312620001b657516001600160a01b03811692838203620001b6578051926200006b84620001bb565b6004845260208401631817191b60e11b81526003602084516200008e81620001bb565b828152016245415360e81b81522094519020948460e052610100958087524660a052835160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f978884528683015260608201524660808201523060a082015260a0815260c081019381851090851117620001a0578385525190206080523060c052610120948552156200019157506101409182525191614e039384620001d8853960805184614892015260a0518461494d015260c05184614863015260e051846148e101525183614907015251826148be01525181818161028601528181610ab4015281816110b801528181612b5e0152818161324c01526134ca0152f35b6311a1e69760e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620001a05760405256fe61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b60e0526110678261295c565b602060e05101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d576000608052611737575b506080515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60c0526000915b83831061113f5761112b3460c05160a05160805161376d565b60e0515260206102fb8160e05101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060805101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560c0516122bd565b528261158585602060e05101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b608052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\",\n  \"deployedBytecode\": \"0x61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b60e0526110678261295c565b602060e05101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d576000608052611737575b506080515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60c0526000915b83831061113f5761112b3460c05160a05160805161376d565b60e0515260206102fb8160e05101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060805101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560c0516122bd565b528261158585602060e05101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b608052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"details\": \"Emitted when an attestation has been made.\",\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"details\": \"Emitted when an attestation has been revoked.\",\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"details\": \"Emitted when a data has been revoked.\",\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"details\": \"Emitted when a data has been timestamped.\",\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"details\": \"Attests to a specific schema.\",\n        \"params\": {\n          \"request\": \"The arguments of the attestation request. Example: attest({     schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",     data: {         recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",         expirationTime: 0,         revocable: true,         refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",         data: \\\"0xF00D\\\",         value: 0     } })\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation.\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": {\n        \"details\": \"Attests to a specific schema via the provided EIP712 signature.\",\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request. Example: attestByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     signature: {         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e' })\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation.\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"details\": \"Returns an existing attestation by UID.\",\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"details\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getNonce(address)\": {\n        \"details\": \"Returns the current nonce per-account.\",\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"details\": \"Returns the timestamp that the specified data was timestamped with.\",\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"details\": \"Returns the address of the global schema registry.\",\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"details\": \"Returns the timestamp that the specified data was timestamped with.\",\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"details\": \"Checks whether an attestation exists.\",\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"details\": \"Attests to multiple schemas.\",\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttest([{     schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 1000     },     {         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 0,         revocable: false,         refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',         data: '0x00',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: true,         refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',         data: '0x12345678',         value: 0     }, }])\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations.\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": {\n        \"details\": \"Attests to multiple schemas using via provided EIP712 signatures.\",\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiAttestByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',         expirationTime: 1673891048,         revocable: true,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x1234',         value: 0     },     {         recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',         expirationTime: 0,         revocable: false,         refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',         data: '0x00',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4' }])\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations.\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"details\": \"Revokes existing attestations to multiple schemas.\",\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevoke([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }], }, {     schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',     data: [{         uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',         value: 0     }, }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": {\n        \"details\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\",\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: [{         uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',         value: 1000     },     {         uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',         value: 0     }],     signatures: [{         v: 28,         r: '0x148c...b25b',         s: '0x5a72...be22'     },     {         v: 28,         r: '0x487s...67bb',         s: '0x12ad...2366'     }],     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"details\": \"Revokes the specified multiple bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"details\": \"Timestamps the specified multiple bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"details\": \"Revokes an existing attestation to a specific schema. Example: revoke({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',         value: 0     } })\",\n        \"params\": {\n          \"request\": \"The arguments of the revocation request.\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": {\n        \"details\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature. Example: revokeByDelegation({     schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',     data: {         uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',         value: 0     },     signature: {         v: 27,         r: '0xb593...7142',         s: '0x0f5b...2cce'     },     revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992' })\",\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request.\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"details\": \"Revokes the specified bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"details\": \"Timestamps the specified bytes32 data.\",\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      }\n    },\n    \"title\": \"EAS - Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 3790,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 1977,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)4348_storage)\"\n      },\n      {\n        \"astId\": 1981,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 1987,\n        \"contract\": \"contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)4348_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)4348_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_struct(Attestation)4348_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 4329,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4331,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4333,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4335,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4337,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 4339,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4341,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4343,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4345,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 4347,\n            \"contract\": \"contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "deployments/sepolia/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x9C9d17bEE150E4eCDf3b99baFA62c08Cb30E82BC\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x89ec68408e1af7af85041daf58be8deee89a7b6f4b28aadb9a51ace53a8e477b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0x9C9d17bEE150E4eCDf3b99baFA62c08Cb30E82BC\",\n    \"transactionIndex\": 18,\n    \"gasUsed\": \"2301134\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x59f87dfceab831472c6a93584ffb9883b2505ff6e25f9650f8fd61f0b4d0e00a\",\n    \"transactionHash\": \"0x89ec68408e1af7af85041daf58be8deee89a7b6f4b28aadb9a51ace53a8e477b\",\n    \"logs\": [],\n    \"blockNumber\": 4604300,\n    \"cumulativeGasUsed\": \"9524966\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xC2679fBD37d54388Ce493F1DB75320D236e1815e\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {EIP-5267}. _Available since v4.9._\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6c2efc64baccbde4904ae18ed45139c9aa8cff96d6888344d1e4d2eb8b659f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant _FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(_FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != _FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0e310c163edf15db45d4ff938113ab357f94fa86e61ea8e790853c4d2e13256\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(Address.isContract(newImplementation), \\\\\\\"ERC1967: new implementation is not a contract\\\\\\\");\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n *\\\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\\\n * _Available since v4.9 for `string`, `bytes`._\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.8;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the `_domainSeparatorV4` function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * _Available since v3.4._\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant _TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(_TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {EIP-5267}.\\\\n     *\\\\n     * _Available since v4.9._\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        override\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _name.toStringWithFallback(_nameFallback),\\\\n            _version.toStringWithFallback(_versionFallback),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8432884527a7ad91e6eed1cfc5a0811ae2073e5bca107bd0ca442e9236b03dbd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0x9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f814567;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0xd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e4;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 2, 0) EIP712(name, \\\\\\\"1.2.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != msg.sender) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(abi.encode(REVOKE_PROXY_TYPEHASH, request.schema, data.uid, data.value, request.deadline))\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0b0854f743bc2a2541552b9d70d52faa678a9c7cbd87190decf8ab8bde69ddb3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {EIP-5267}. _Available since v4.9._\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2559,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2561,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7337,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 7341,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 7345,\n        \"contract\": \"contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/sepolia/Indexer.json",
    "content": "{\n  \"address\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x8272fd4f3d0b93ad137c8ff76bf50631aaec0290482d58f1647e9a3300f19686\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x6457B4DB9575DBc1bac391DaE4B239722c4000d0\",\n    \"contractAddress\": \"0xaEF4103A04090071165F78D45D83A0C0782c2B2a\",\n    \"transactionIndex\": 18,\n    \"gasUsed\": \"981051\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd89bc0a361e08e908c5d79f771228a52f9edd65d282bb27313d80ef1976e0f64\",\n    \"transactionHash\": \"0x8272fd4f3d0b93ad137c8ff76bf50631aaec0290482d58f1647e9a3300f19686\",\n    \"logs\": [],\n    \"blockNumber\": 4603907,\n    \"cumulativeGasUsed\": \"3183267\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xC2679fBD37d54388Ce493F1DB75320D236e1815e\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"363c8b5710f335e9a0bfd66216b6038c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.19+commit.7dd6d404\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schema\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xd5a192f0bcee5372b69b0bb746c26317a2691dd10bfa52adbd08a9b723a55036\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x772b1ebcf3e5c93fecb53762e11bbdae75fcb667deea4ac21134fccfe78326e4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { IEAS, AttestationRequest, AttestationRequestData, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 2, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schema) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schema) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schema].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(_schemaAttesterRecipientAttestations[schema][attester][recipient], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schema,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schema][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schema,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schema], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schema The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schema) external view returns (uint256) {\\\\n        return _schemaAttestations[schema].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schema = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schema].push(attestationUID);\\\\n        _receivedAttestations[recipient][schema].push(attestationUID);\\\\n        _sentAttestations[attester][schema].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schema][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c0f19a79712ee67248f0f0d3f343daf4281da31ffa6319c67c8a7af38a660b0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _path;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _path = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_path))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5883c852730b00d73b10475f3b382afce8f30b89f337078ec03a66c463e048a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Common.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb74b64e20b90b35004750d2c78ceb114a304975d22d71bd9a2a9de0d483f0395\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schema\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schema\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 6193,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6200,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 6209,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 6214,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 6218,\n        \"contract\": \"contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/sepolia/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x0a7E2Ff54e76B8E6659aedc9103FB21c038050D0\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"VERSION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x731c2d25800a3e44a5f080d9acf8079949991271a9ae52c470662fe96835d667\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x01a93612f26100B6E18a2e3dd57df5c3ccaFeca1\",\n    \"contractAddress\": \"0x0a7E2Ff54e76B8E6659aedc9103FB21c038050D0\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"477737\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x931e77b81f334ea2fa8cc283b0637457523379a317555dfddad312996fac0c85\",\n    \"transactionHash\": \"0x731c2d25800a3e44a5f080d9acf8079949991271a9ae52c470662fe96835d667\",\n    \"logs\": [],\n    \"blockNumber\": 2958569,\n    \"cumulativeGasUsed\": \"29612372\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"78891d974a28827b8f023101fe409776\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"VERSION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address)\\\":{\\\"details\\\":\\\"Emitted when a new schema has been registered\\\",\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"details\\\":\\\"Returns an existing schema by UID\\\",\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"details\\\":\\\"Submits and reserves a new schema\\\",\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}}},\\\"title\\\":\\\"The global schema registry.\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title A struct representing a record for a submitted schema.\\\\n */\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/**\\\\n * @title The global schema registry interface.\\\\n */\\\\ninterface ISchemaRegistry {\\\\n    /**\\\\n     * @dev Emitted when a new schema has been registered\\\\n     *\\\\n     * @param uid The schema UID.\\\\n     * @param registerer The address of the account used to register the schema.\\\\n     */\\\\n    event Registered(bytes32 indexed uid, address registerer);\\\\n\\\\n    /**\\\\n     * @dev Submits and reserves a new schema\\\\n     *\\\\n     * @param schema The schema data schema.\\\\n     * @param resolver An optional schema resolver.\\\\n     * @param revocable Whether the schema allows revocations explicitly.\\\\n     *\\\\n     * @return The UID of the new schema.\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /**\\\\n     * @dev Returns an existing schema by UID\\\\n     *\\\\n     * @param uid The UID of the schema to retrieve.\\\\n     *\\\\n     * @return The schema data members.\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef47e449dd02bd034e26b1dea505ce533906f8462fc674c938ed0e872a68d640\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Types.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The global schema registry.\\\\n */\\\\ncontract SchemaRegistry is ISchemaRegistry {\\\\n    error AlreadyExists();\\\\n\\\\n    // The version of the contract.\\\\n    string public constant VERSION = \\\\\\\"0.26\\\\\\\";\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /**\\\\n     * @inheritdoc ISchemaRegistry\\\\n     */\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /**\\\\n     * @inheritdoc ISchemaRegistry\\\\n     */\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Calculates a UID for a given schema.\\\\n     *\\\\n     * @param schemaRecord The input schema.\\\\n     *\\\\n     * @return schema UID.\\\\n     */\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x11ca856573f1b53530d27d40b0a5629a5c591957e221a1b4b8eae2b2053f168b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Types.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.19;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n/**\\\\n * @dev A struct representing EIP712 signature data.\\\\n */\\\\nstruct EIP712Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/**\\\\n * @dev A struct representing a single attestation.\\\\n */\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x547096b5cb7bfad9591bdc520705f8110534cd040ed0f7a0ba8d83ea4a565b45\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"../Types.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The interface of an optional schema resolver.\\\\n */\\\\ninterface ISchemaResolver {\\\\n    /**\\\\n     * @dev Returns whether the resolver supports ETH transfers.\\\\n     */\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation and verifies whether it's valid.\\\\n     *\\\\n     * @param attestation The new attestation.\\\\n     *\\\\n     * @return Whether the attestation is valid.\\\\n     */\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes multiple attestations and verifies whether they are valid.\\\\n     *\\\\n     * @param attestations The new attestations.\\\\n     * @param values Explicit ETH amounts which were sent with each attestation.\\\\n     *\\\\n     * @return Whether all the attestations are valid.\\\\n     */\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes an attestation revocation and verifies if it can be revoked.\\\\n     *\\\\n     * @param attestation The existing attestation to be revoked.\\\\n     *\\\\n     * @return Whether the attestation can be revoked.\\\\n     */\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Processes revocation of multiple attestation and verifies they can be revoked.\\\\n     *\\\\n     * @param attestations The existing attestations to be revoked.\\\\n     * @param values Explicit ETH amounts which were sent with each revocation.\\\\n     *\\\\n     * @return Whether the attestations can be revoked.\\\\n     */\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0f3a75c28cdb91fa9227a6eef183379ecea2b6bf38db52795b5c4e6af79299e8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\",\n  \"deployedBytecode\": \"0x60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address)\": {\n        \"details\": \"Emitted when a new schema has been registered\",\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"details\": \"Returns an existing schema by UID\",\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"details\": \"Submits and reserves a new schema\",\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      }\n    },\n    \"title\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5366,\n        \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)5313_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)5553\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)5313_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)5313_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)5313_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 5305,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5308,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)5553\"\n          },\n          {\n            \"astId\": 5310,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 5312,\n            \"contract\": \"contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "deployments/sepolia/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/sepolia/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schema: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/sepolia/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/sepolia/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61016034620001b657601f62004fdb38819003918201601f19168301926001600160401b0392909183851183861017620001a0578160209284926040978852833981010312620001b657516001600160a01b03811692838203620001b6578051926200006b84620001bb565b6004845260208401631817191b60e11b81526003602084516200008e81620001bb565b828152016245415360e81b81522094519020948460e052610100958087524660a052835160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f978884528683015260608201524660808201523060a082015260a0815260c081019381851090851117620001a0578385525190206080523060c052610120948552156200019157506101409182525191614e039384620001d8853960805184614892015260a0518461494d015260c05184614863015260e051846148e101525183614907015251826148be01525181818161028601528181610ab4015281816110b801528181612b5e0152818161324c01526134ca0152f35b6311a1e69760e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b604081019081106001600160401b03821117620001a05760405256fe61010080604052600436101561001457600080fd5b60003560e01c90816312b11a1714611eec5750806313893f6114611e645780632d0335ab14611dff57806344adc90e14611cfc5780634692626714611c9e5780634cb7e9e514611b9c5780634d00307014611b54578063831e05a11461192e578063a3112a64146118c7578063b469318d1461184a578063b83010d3146117f1578063cf190f34146117a8578063d45c443514611754578063e13458fc14610f5c578063e30bb56314610f08578063e45d03f914610ca4578063e57a6b1b14610ba0578063e71ff36514610b19578063ed24911d14610ad8578063f10b5cc814610a69578063f17325e7146101975763ffa1ad741461011257600080fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925761018e60405161015081612149565b600481527f302e3236000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612016565b0390f35b600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610192576004359067ffffffffffffffff821161019257604082600401918336030112610192576102046101f0612215565b926101ff60243692018461227d565b6122d1565b61020d836122b0565b52610217826122b0565b50610220612942565b5081519161022c612942565b916102368461295c565b6020840152604051937fa2ea7c6e0000000000000000000000000000000000000000000000000000000085528135600486015260008560248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa948515610a5d57600095610a38575b50845115610a0e57916102c983612a7f565b916102d38461295c565b936000925b8184106103045760206102fb81896102f2348b8b8f61376d565b815201516122b0565b51604051908152f35b610316848299949698939597996122bd565b519267ffffffffffffffff60208501511680151590816109f9575b506109cf57604081015115806109c2575b6109985760608401519467ffffffffffffffff6020860151169573ffffffffffffffffffffffffffffffffffffffff86511660408701511515906080880151926040519961038f8b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c08901523360e089015261010088015261012087015260005b602087015160c08801516104de609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182612182565b51902080600052600160205260406000205415610504575060010163ffffffff166103d5565b919690509997919998969492939881815281600052600160205260406000209080518255602081015160018301556105e36002830167ffffffffffffffff6040840151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606087015160401b1692161717815567ffffffffffffffff6080840151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a081015160038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005820173ffffffffffffffffffffffffffffffffffffffff60e0830151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100860151151560a01b1692161717905561012081015180519167ffffffffffffffff831161096957838c938c938f9660066106ca91015461278f565b601f81116108f5575b50602090601f831160011461081857600692916000918361080d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060870151806107b8575b5085602073ffffffffffffffffffffffffffffffffffffffff9560019995610765848761077d9761075f838e9b6122bd565b526122bd565b506107758460a0890151926122bd565b5201516122bd565b525116906040519081528535917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b3560203393a40192906102d8565b915092506107d491506000526001602052604060002054151590565b156107e35788888b928e61072d565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806106ef565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106108ca5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610610893575b505050811b01910155610722565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610885565b9497509295509396506020600181928685015181550194019201928f9693928f9693928f9693610829565b9295509295509250600684016000526020600020601f840160051c810160208510610962575b928f9693928f9693928f96935b601f830160051c8201811061093e5750506106d3565b60019396995080929598506000919497505501928f9693928f9693928f9693610928565b508061091b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408401511515610342565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff421610158a610331565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b610a569195503d806000833e610a4e8183612182565b8101906129b8565b93856102b7565b6040513d6000823e3d90fd5b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610b1161484c565b604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610b69903690600401611f43565b9142169160005b818110610b8257602084604051908152f35b80610b9a85610b946001948688612734565b356146e1565b01610b70565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257604051610bd6816120f5565b600435808252610be53661267c565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261019257604051610c208161212d565b60643560ff81168103610192578152608435602082015260a4356040820152604083015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361019257610c7683826060610ca2960152614d30565b610c7e61262d565b610c873661267c565b610c90826122b0565b52610c9a816122b0565b5034926131ff565b005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257610cf183913690600401611f43565b909234926000915b838310610d0257005b610d0d838588612599565b946080863603126101925760405195610d25876120f5565b803587528381013583811161019257810194601f9536878201121561019257610d5490369087813591016126c2565b9285890193845260408301358581116101925783019636908801121561019257863594610d80866121fd565b97610d8e604051998a612182565b868952878901886060809902830101913683116101925789808a9201925b848410610ef05750509050610dca915060408c01958a875201611f97565b94868b01958652519788518015918215610ee4575b5050610eba5760005b8851811015610e5057600190610e4a8c51610e03838d6122bd565b51610e0f848a516122bd565b5173ffffffffffffffffffffffffffffffffffffffff8b51169160405193610e36856120f5565b84528d84015260408301528a820152614d30565b01610de8565b50986001955081935090610eaa929a97610eb09592519073ffffffffffffffffffffffffffffffffffffffff8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d01149451169161347c565b9061255d565b9501919493610cf9565b60046040517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508c80610ddf565b610efa3685612393565b815201910190898991610dac565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020610f526004356000526001602052604060002054151590565b6040519015158152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6020813601126101925760043567ffffffffffffffff81116101925760c0816004019282360301126101925760405190610fb6826120f5565b82358252602481019182359167ffffffffffffffff83116101925760a461101691610fea61104695600436918401016122d1565b6020850152610ffc3660448301612393565b6040850152019161100c83611f97565b6060820152614973565b61102d611021612215565b936101ff36918761227d565b611036846122b0565b52611040836122b0565b506123d1565b9061104f612942565b5080519061105b612942565b60e0526110678261295c565b602060e05101526040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081528435600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a5d576000608052611737575b506080515115610a0e5790916110ff83612a7f565b60a05261110b8361295c565b60c0526000915b83831061113f5761112b3460c05160a05160805161376d565b60e0515260206102fb8160e05101516122b0565b61114983826122bd565b519067ffffffffffffffff6020830151168015159081611722575b506109cf57604060805101511580611715575b6109985760608201519467ffffffffffffffff6020840151169573ffffffffffffffffffffffffffffffffffffffff8451166040850151151590608086015192604051996111c48b612165565b60008b528b3560208c015267ffffffffffffffff421660408c015260608b0152600060808b015260a08a015260c089015273ffffffffffffffffffffffffffffffffffffffff861660e089015261010088015261012087015260005b602087015160c08801516112ee609d60e08b015160408c01518c60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415611314575060010163ffffffff16611220565b91959294969050818152816000526001602052604060002081518155602082015160018201556113eb6002820167ffffffffffffffff6040850151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff0000000000000000606088015160401b1692161717815567ffffffffffffffff6080850151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a082015160038201556004810173ffffffffffffffffffffffffffffffffffffffff60c0840151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005810173ffffffffffffffffffffffffffffffffffffffff60e0840151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff0000000000000000000000000000000000000000610100870151151560a01b1692161717905561012082015180519067ffffffffffffffff8211610969576114cb600684015461278f565b601f81116116ce575b50602090601f83116001146116045760069291600091836115f9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060840151806115d7575b5060019373ffffffffffffffffffffffffffffffffffffffff916115548560a0516122bd565b526115618460a0516122bd565b5060a08101516115738560c0516122bd565b528261158585602060e05101516122bd565b525116906040519081528735917f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8a1693a401919290611112565b6115ee906000526001602052604060002054151590565b156107e3578861152e565b015190508c806114f0565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106116b65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061167f575b505050811b01910155611523565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558c8080611671565b91926020600181928685015181550194019201611615565b600684016000526020600020601f840160051c81016020851061170e575b601f830160051c820181106117025750506114d4565b600081556001016116ec565b50806116ec565b5060408201511515611177565b905067ffffffffffffffff4216101587611164565b61174b903d806000833e610a4e8183612182565b608052846110ea565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576004356000526002602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b118160043533614787565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760206040517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611896611f74565b1660005260036020526040600020602435600052602052602067ffffffffffffffff60406000205416604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576118fe612744565b50600435600052600160205261018e61191a60406000206127e2565b604051918291602083526020830190612059565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611978903690600401611f43565b90611982826123f2565b9160009134906000925b8084106119ac5761018e6119a08688614674565b60405191829182611fb8565b909192936119bb858385612599565b6119c86020820182612499565b9081158015611b3c575b610eba57908691600090898760608701968035945b868110611a6f57505093611a3f93611a396001999894611a31602099957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611a489a0114966123d1565b9336916124ed565b90612aec565b9687519061255d565b95018051611a56888a6122bd565b52611a6187896122bd565b50515101940192919061198c565b9250929394955050611a868160051b84018461227d565b90611a9460408401846125d9565b821015611b0d5760019273ffffffffffffffffffffffffffffffffffffffff611aff92611aef611ac38c6123d1565b91611ade60405195611ad4876120f5565b8c875236906122d1565b602086015236906060880201612393565b6040840152166060820152614973565b01878a959493928c926119e7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b50611b4a60408401846125d9565b90508214156119d2565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602067ffffffffffffffff4216610b11816004356146e1565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff9060043582811161019257611be9903690600401611f43565b929091600090345b858310611bfa57005b611c05838787612459565b828101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019257810191823592868411610192578401928060061b360384136101925760019382610eaa92611c9695611c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e018b1494339336916126c2565b903561347c565b920191611bf1565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610ca2611cd361262d565b611cdc3661267c565b611ce5826122b0565b52611cef816122b0565b50349033906004356131ff565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff811161019257611d47903690600401611f43565b611d53819392936123f2565b92600092346000937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610611d945761018e6119a0888a614674565b90919293949560019085611dd6611a3f8a8888611db2838a8f612459565b611dcf611dc188830183612499565b9390951494339336916124ed565b9035612aec565b95018051611de48a8c6122bd565b52611def898b6122bd565b5051510196019493929190611d80565b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff611e4b611f74565b1660005260006020526020604060002054604051908152f35b346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925767ffffffffffffffff60043581811161019257611eb4903690600401611f43565b9142169160005b818110611ecd57602084604051908152f35b80611ee685611edf6001948688612734565b3533614787565b01611ebb565b346101925760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156101925782359167ffffffffffffffff8311610192576020808501948460051b01011161019257565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b6020908160408183019282815285518094520193019160005b828110611fdf575050505090565b835185529381019392810192600101611fd1565b60005b8381106120065750506000910152565b8181015183820152602001611ff6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361205281518092818752878088019101611ff3565b0116010190565b906120f291805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e083015261010080820151151590830152610120809101519161014080928201520190612016565b90565b6080810190811067ffffffffffffffff82111761096957604052565b60c0810190811067ffffffffffffffff82111761096957604052565b6060810190811067ffffffffffffffff82111761096957604052565b6040810190811067ffffffffffffffff82111761096957604052565b610140810190811067ffffffffffffffff82111761096957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761096957604052565b67ffffffffffffffff811161096957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116109695760051b60200190565b60409081519161222483612149565b60018352829160005b6020808210156122755783516020929161224682612111565b6000825260008183015260008683015260606000818401526080830152600060a083015282880101520161222d565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215610192570190565b805115611b0d5760200190565b8051821015611b0d5760209160051b010190565b91909160c08184031261019257604051906122eb82612111565b81936122f682611f97565b835260209167ffffffffffffffff8184013581811681036101925784860152604082013580151581036101925760408601526060820135606086015260808201359081116101925781019180601f8401121561019257823592612358846121c3565b916123666040519384612182565b84835285858301011161019257848460a09695879660009401838601378301015260808501520135910152565b9190826060910312610192576040516123ab8161212d565b8092803560ff811681036101925760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036101925790565b906123fc826121fd565b6124096040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061243782946121fd565b019060005b82811061244857505050565b80606060208093850101520161243c565b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff821161019257602001918160051b3603831361019257565b929190926124fa846121fd565b916125086040519384612182565b829480845260208094019060051b8301928284116101925780915b84831061253257505050505050565b823567ffffffffffffffff811161019257869161255286849386016122d1565b815201920191612523565b9190820391821161256a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015611b0d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610192570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610192570180359067ffffffffffffffff82116101925760200191606082023603831361019257565b60409081519161263c83612149565b600183528291600091825b6020808210156126735782516020929161266082612149565b8682528681830152828901015201612647565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261019257604051906126b382612149565b60243582526044356020830152565b9291926126ce826121fd565b6040926126dd84519283612182565b819581835260208093019160061b84019381851161019257915b84831061270657505050505050565b858383031261019257838691825161271d81612149565b8535815282860135838201528152019201916126f7565b9190811015611b0d5760051b0190565b6040519061275182612165565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c921680156127d8575b60208310146127a957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161279e565b90604051916127f083612165565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c161515610100850152019060405193849260009281549161288d8361278f565b8087529282811690811561290257506001146128bc575b5050505061012092916128b8910384612182565b0152565b60009081528381209695945091905b8183106128ea575093945091925090820101816128b8610120386128a4565b865488840185015295860195879450918301916128cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b8301019050816128b8610120386128a4565b6040519061294f82612149565b6060602083600081520152565b90612966826121fd565b6129736040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129a182946121fd565b0190602036910137565b5190811515820361019257565b906020808383031261019257825167ffffffffffffffff9384821161019257019260808484031261019257604051936129f0856120f5565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036101925783860152612a25604082016129ab565b60408601526060810151918211610192570182601f8201121561019257805190612a4e826121c3565b93612a5c6040519586612182565b8285528383830101116101925782612a779385019101611ff3565b606082015290565b90612a89826121fd565b612a966040519182612182565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612ac482946121fd565b019060005b828110612ad557505050565b602090612ae0612744565b82828501015201612ac9565b9290949391612af9612942565b50855193612b05612942565b94612b0f8161295c565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a5d576000926131e2575b50815115610a0e5792979091612ba484612a7f565b98612bae8561295c565b946000935b818510612bd057505050505095612bcb9495966139d4565b815290565b91959398949699909297612be48a846122bd565b519a67ffffffffffffffff60208d01511680151590816131cd575b506109cf57604089015115806131c0575b61099857899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f90612c6182612165565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b612d8c609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516104a38160999360208587019101611ff3565b51902080600052600160205260406000205415612db2575060010163ffffffff16612cbb565b90509d979b9199929a949d9c909698939c8084528060005260016020526040600020918451835560208501516001840155612e946002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff8111610969578894612f76600684015461278f565b601f8111613165575b50602090601f831160011461309857600692916000918361308d575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180613060575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794610765848660019e61075f8361300e9a6122bd565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a612bb3565b9250505061307d9193506000526001602052604060002054151590565b156107e35785918d8b8b38612fdc565b015190503880612f9b565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516811061314a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610613113575b505050811b01910155612fce565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613105565b8183015184558c9850600190930192602092830192016130a9565b90919293949550600684016000526020600020601f840160051c8101602085106131b9575b908b979695949392915b601f830160051c820181106131aa575050612f7f565b600081558c9850600101613194565b508061318a565b5060408c01511515612c10565b905067ffffffffffffffff4216101538612bff565b6131f89192503d806000833e610a4e8183612182565b9038612b8f565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d57600091613461575b50805115610a0e57825161329081612a7f565b9261329a8261295c565b9460005b8381106132b457505050506120f2949550613bb5565b6132be81836122bd565b5190815160005260016020526040600020918254156107e35784600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff8d1673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c91613392826127e2565b61339c858c6122bd565b526133a7848b6122bd565b5060208101516133b7858d6122bd565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a40161329e565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b61347691503d806000833e610a4e8183612182565b3861327d565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a5d5760009161369e575b50805115610a0e57865161350e81612a7f565b926135188261295c565b9460005b83811061353257505050506120f2959650613db4565b61353c818c6122bd565b5190815160005260016020526040600020918254156107e35783600184015403610a0e57600583015473ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036134375760a01c60ff16156109985767ffffffffffffffff600284015460801c1661340d576002830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261360e816127e2565b613618848b6122bd565b52613623838a6122bd565b506020820151613633848c6122bd565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161351c565b6136b391503d806000833e610a4e8183612182565b386134fb565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061372257505050508281830391015281808451928381520193019160005b82811061370e575050505090565b835185529381019392810192600101613700565b9091929594858061375d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51612059565b97980194939190910191016136df565b9092918351936001908186146139b35773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613983579560009687915b80831061387557505050918392916137f09492876040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d5760009161383e575b50905015613814576120f290614545565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d831161386e575b6138528183612182565b8101031261386b5750613864906129ab565b8038613803565b80fd5b503d613848565b9091979661388389876122bd565b51801515806138fd575b6138d3578181116138a9578084920398019801909190916137a7565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613944575b501561388d565b908982813d8311613972575b61395a8183612182565b8101031261386b575061396c906129ab565b3861393d565b503d613950565b513d6000823e3d90fd5b9594505050905060005b82811061399d5750505050600090565b6139a781836122bd565b516138d357830161398d565b6120f295506139cd91506139c6906122b0565b51916122b0565b5191613f8c565b909391845194600190818714613b985773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613b67579660009788915b808310613ab75750505091839291613a579492886040518097819582947f91db0b7e000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613a83575b5090501561381457613a7a575090565b6120f290614545565b82813d8311613ab0575b613a978183612182565b8101031261386b5750613aa9906129ab565b8038613a6a565b503d613a8d565b90919897613ac58a876122bd565b5180151580613aeb575b6138d3578181116138a957808492039901990190919091613a0e565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613b32575b5015613acf565b908982813d8311613b60575b613b488183612182565b8101031261386b5750613b5a906129ab565b38613b2b565b503d613b3e565b969550505091505060005b828110613b825750505050600090565b613b8c81836122bd565b516138d3578301613b72565b6120f29650613bae91506139c6909594956122b0565b5191614113565b909291835193600190818614613d9a5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613d6a579560009687915b808310613cba5750505091839291613c389492876040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613c86575b50905015613c5c576120f290614545565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613cb3575b613c9a8183612182565b8101031261386b5750613cac906129ab565b8038613c4b565b503d613c90565b90919796613cc889876122bd565b5180151580613cee575b6138d3578181116138a957808492039801980190919091613bef565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613d35575b5015613cd2565b908982813d8311613d63575b613d4b8183612182565b8101031261386b5750613d5d906129ab565b38613d2e565b503d613d41565b9594505050905060005b828110613d845750505050600090565b613d8e81836122bd565b516138d3578301613d74565b6120f29550613dad91506139c6906122b0565b519161427b565b909391845194600190818714613f6f5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613f3e579660009788915b808310613e8e5750505091839291613e379492886040518097819582947f88e5b2d9000000000000000000000000000000000000000000000000000000008452600484016136b9565b03925af1908115610a5d57600091613e5a575b50905015613c5c57613a7a575090565b82813d8311613e87575b613e6e8183612182565b8101031261386b5750613e80906129ab565b8038613e4a565b503d613e64565b90919897613e9c8a876122bd565b5180151580613ec2575b6138d3578181116138a957808492039901990190919091613dee565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156139795750600091613f09575b5015613ea6565b908982813d8311613f37575b613f1f8183612182565b8101031261386b5750613f31906129ab565b38613f02565b503d613f15565b969550505091505060005b828110613f595750505050600090565b613f6381836122bd565b516138d3578301613f49565b6120f29650613f8591506139c6909594956122b0565b51916143f5565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061408c575b6138d3578385116138a957614008829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614058575b5090501561402e57816120f29103614545565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614085575b61406c8183612182565b8101031261386b575061407e906129ab565b803861401b565b503d614062565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916140d1575b5015613fba565b908382813d83116140ff575b6140e78183612182565b8101031261386b57506140f9906129ab565b386140ca565b503d6140dd565b505050506138d357600090565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806141f3575b6138d3578486116138a95761418f829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d576000916141bf575b5090501561402e5782906141b557505090565b6120f29103614545565b82813d83116141ec575b6141d38183612182565b8101031261386b57506141e5906129ab565b80386141a2565b503d6141c9565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614238575b5015614141565b908382813d8311614266575b61424e8183612182565b8101031261386b5750614260906129ab565b38614231565b503d614244565b50505050506138d357600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015614106578415158061437b575b6138d3578385116138a9576142f7829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614347575b5090501561431d57816120f29103614545565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311614374575b61435b8183612182565b8101031261386b575061436d906129ab565b803861430a565b503d614351565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d576000916143c0575b50156142a9565b908382813d83116143ee575b6143d68183612182565b8101031261386b57506143e8906129ab565b386143b9565b503d6143cc565b93919373ffffffffffffffffffffffffffffffffffffffff60208092015116801561426d57851515806144cb575b6138d3578486116138a957614471829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190612059565b03925af1908115610a5d57600091614497575b5090501561431d5782906141b557505090565b82813d83116144c4575b6144ab8183612182565b8101031261386b57506144bd906129ab565b8038614484565b503d6144a1565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa908115610a5d57600091614510575b5015614423565b908382813d831161453e575b6145268183612182565b8101031261386b5750614538906129ab565b38614509565b503d61451c565b8061454d5750565b80471061461657600080808093335af13d15614611573d61456d816121c3565b9061457b6040519283612182565b8152600060203d92013e5b1561458d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b614586565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b9061467e9061295c565b60009283925b80518410156146d9579361469884866122bd565b519160005b83518110156146c8576146b081856122bd565b516146bb84876122bd565b526001928301920161469d565b509094600190940193909150614684565b509250905090565b6000818152600260205267ffffffffffffffff908160408220541661475d577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600260205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600360205260408120908381528160205267ffffffffffffffff80604083205416614822577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061494a575b156148b4577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261494481612111565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461488b565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260008252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e0850152610100908185015283526101208301968388109088111761096957614a5e8695614a7294614a7a998b52519020614ce4565b918860ff8351169183015192015192614c48565b949094614aaf565b5116911603614a865750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614c195780614ac05750565b60018103614b265760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614b8c5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614b9557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614cd85791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614ccb57815173ffffffffffffffffffffffffffffffffffffffff811615614cc5579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614cec61484c565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152614944816120f5565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600060205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff87111761096957614de18594614a7293614a7a988a52519020614ce4565b9060ff81511688602083015192015192614c4856fea164736f6c6343000812000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/sepolia/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/sepolia/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323600000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000812000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/soneium/.chainId",
    "content": "1868\n"
  },
  {
    "path": "deployments/soneium/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1736905397,\n  \"000004-name-initial-schemas\": 1736905858,\n  \"000005-eip712-proxy\": 1736905868,\n  \"000006-indexer\": 1736905878\n}"
  },
  {
    "path": "deployments/soneium/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/soneium/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x465a34dd6dDb5DF22DBC67D005b5BF4a0BF7f8AE\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x115af115c38e6bfc55c2633f080980f148f231d7c2fb8d472b9b237b2169478a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x23F4aaC86f2181f37669D2b357915f2c2c3B0332\",\n    \"contractAddress\": \"0x465a34dd6dDb5DF22DBC67D005b5BF4a0BF7f8AE\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2297740\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x01c705ac167d41f6c9d34f8433bca6052f460cd2b28077dcfac6e7b6d830308e\",\n    \"transactionHash\": \"0x115af115c38e6bfc55c2633f080980f148f231d7c2fb8d472b9b237b2169478a\",\n    \"logs\": [],\n    \"blockNumber\": 1885556,\n    \"cumulativeGasUsed\": \"2341690\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\\\\\"1.4.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != request.revoker) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3573,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 3581,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/soneium/Indexer.json",
    "content": "{\n  \"address\": \"0x16613642e9793d413c296f9AB5457077b99AA7B0\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5dc309aa1ae11be28bdc1d1162753eb266fdac1cdadd292805a62ef1893bbaac\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x23F4aaC86f2181f37669D2b357915f2c2c3B0332\",\n    \"contractAddress\": \"0x16613642e9793d413c296f9AB5457077b99AA7B0\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"989532\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xddae1c640cd603dfa1009d2361769f54a4c0d54b3c8a99446c49e0f02b60054c\",\n    \"transactionHash\": \"0x5dc309aa1ae11be28bdc1d1162753eb266fdac1cdadd292805a62ef1893bbaac\",\n    \"logs\": [],\n    \"blockNumber\": 1885561,\n    \"cumulativeGasUsed\": \"1155294\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2421,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2428,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 2442,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 2446,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/soneium/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/soneium/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/soneium/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/soneium/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schema: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schema: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schema: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schema: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schema: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/soneium/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/soneium/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  Indexer,\n  IndexerInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/soneium/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/soneium/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600260a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/soneium/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e06040523480156200001257600080fd5b5060405162002d7638038062002d7683398101604081905262000035916200022c565b6040805180820190915260058152640312e322e360dc1b60208201526001608052600260a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128176200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce015260006113d9015260006113b10152600061130c0152600061133601526000611360015260006107760152600061074d0152600061072401526128176000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a00565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a42565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f8145675b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611ac9565b61017d6101bb366004611ae3565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b1e565b61024361023e366004611a00565b610864565b6040516101459190611bdd565b6100df61025e366004611c21565b610c65565b34801561026f57600080fd5b507fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e461017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c3a565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c69565b90506020028101906103419190611c98565b61034a90611f05565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c69565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c69565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c69565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612000565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120cf565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120cf565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612240565b610fb6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122b9565b610652906122ed565b8152506040518363ffffffff1660e01b8152600401610671919061236c565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612399565b90506106c660c0840160a085016123b2565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f0000000000000000000000000000000000000000000000000000000000000000611189565b6107717f0000000000000000000000000000000000000000000000000000000000000000611189565b61079a7f0000000000000000000000000000000000000000000000000000000000000000611189565b6040516020016107ac939291906123cd565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611247565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611247565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c3a565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c69565b90506020028101906108fb9190611c98565b905036600061090d6020840184612443565b90925090508080158061092e575061092860408501856124ab565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c69565b90506020028101906109ac91906122b9565b6109b5906122ed565b81526020016109c760408901896124ab565b858181106109d7576109d7611c69565b9050606002018036038101906109ed9190612512565b8152602001610a026080890160608a016123b2565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a0161252e565b67ffffffffffffffff169052610fb6565b600101610968565b50604080518082019091528435815260208101610a638486612549565b815250868681518110610a7857610a78611c69565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125bd565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126b0565b90506000805b84811015610c575736888883818110610b7b57610b7b611c69565b9050602002810190610b8d9190611c98565b9050366000610b9f6020840184612443565b90925090508060005b81811015610c4157610bc060808601606087016123b2565b600360008a8a81518110610bd657610bd6611c69565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c7736839003830183612741565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127ad565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f6112f2565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea18161142a565b835183516020808601516080880151604051600095610f2d95610f12957fd4e76f924411647a916bb4ae4631b3cf45c44e2da56ed1c63edb18ebc97ba5e495929491930194855260208501939093526040840191909152606083015267ffffffffffffffff16608082015260a00190565b60405160208183030381529060405280519060200120611538565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f6282846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fea57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611021576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160408201516110348161142a565b60006111017f9d3e80e7032dc16815a5f67aa94e851240ae3b24eed13a7431bdac738f81456760001b856000015185600001518660200151876040015188606001518960800151805190602001208a60a001518c60800151604051602001610f1299989796959493929190988952602089019790975273ffffffffffffffffffffffffffffffffffffffff95909516604088015267ffffffffffffffff9384166060880152911515608087015260a086015260c085015260e0840191909152166101008201526101200190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113682846000015185602001518660400151611580565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000611196836115a8565b600101905060008167ffffffffffffffff8111156111b6576111b6611c3a565b6040519080825280601f01601f1916602001820160405280156111e0576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111ea57509392505050565b606060ff83146112615761125a8361168a565b9050610c5f565b81805461126d906120cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611299906120cf565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561135857507f000000000000000000000000000000000000000000000000000000000000000046145b1561138257507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161149a91906127c9565b9081526040519081900360200190205460ff16156114e4576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114f691906127c9565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f6115456112f2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611591878787876116c9565b9150915061159e816117b8565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061161d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061163b57662386f26fc10000830492506010015b6305f5e1008310611653576305f5e100830492506008015b612710831061166757612710830492506004015b60648310611679576064830492506002015b600a8310610c5f5760010192915050565b6060600061169783611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561170057506000905060036117af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611754573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117a8576000600192509250506117af565b9150600090505b94509492505050565b60008160048111156117cc576117cc6127db565b036117d45750565b60018160048111156117e8576117e86127db565b03611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b6002816004811115611868576118686127db565b036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161184b565b60038160048111156118e3576118e36127db565b03611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161184b565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119c657600080fd5b50813567ffffffffffffffff8111156119de57600080fd5b6020830191508360208260051b85010111156119f957600080fd5b9250929050565b60008060208385031215611a1357600080fd5b823567ffffffffffffffff811115611a2a57600080fd5b611a36858286016119b4565b90969095509350505050565b600060208284031215611a5457600080fd5b5035919050565b60005b83811015611a76578181015183820152602001611a5e565b50506000910152565b60008151808452611a97816020860160208601611a5b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611adc6020830184611a7f565b9392505050565b600060208284031215611af557600080fd5b813567ffffffffffffffff811115611b0c57600080fd5b820160e08185031215611adc57600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b5a60e084018a611a7f565b8381036040850152611b6c818a611a7f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bcb57835183529284019291840191600101611baf565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b60006101008284031215611c3457600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611ccc57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cf957611cf9611c3a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d6957611d69611c3a565b604052919050565b600067ffffffffffffffff821115611d8b57611d8b611c3a565b5060051b60200190565b600060408284031215611da757600080fd5b6040516040810181811067ffffffffffffffff82111715611dca57611dca611c3a565b604052823581526020928301359281019290925250919050565b600060608284031215611df657600080fd5b6040516060810181811067ffffffffffffffff82111715611e1957611e19611c3a565b604052905080823560ff81168114611e3057600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e6057600080fd5b81356020611e75611e7083611d71565b611d22565b82815260609283028501820192828201919087851115611e9457600080fd5b8387015b85811015611eb757611eaa8982611de4565b8452928401928101611e98565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ee857600080fd5b919050565b803567ffffffffffffffff81168114611ee857600080fd5b600060a08236031215611f1757600080fd5b611f1f611cd6565b8235815260208084013567ffffffffffffffff80821115611f3f57600080fd5b9085019036601f830112611f5257600080fd5b8135611f60611e7082611d71565b81815260069190911b83018401908481019036831115611f7f57600080fd5b938501935b82851015611fa857611f963686611d95565b82528582019150604085019450611f84565b80868801525050506040860135925080831115611fc457600080fd5b5050611fd236828601611e4f565b604083015250611fe460608401611ec4565b6060820152611ff560808401611eed565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120c0578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120ab5761209782855180518252602090810151910152565b928b019260019290920191908a019061207a565b50978a01979550505091870191600101612028565b50919998505050505050505050565b600181811c908216806120e357607f821691505b602082108103611c34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261212d57600080fd5b813567ffffffffffffffff81111561214757612147611c3a565b61217860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d22565b81815284602083860101111561218d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121bc57600080fd5b6121c4611cff565b90506121cf82611ec4565b81526121dd60208301611eed565b6020820152604082013580151581146121f557600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561221e57600080fd5b61222a8482850161211c565b60808301525060a082013560a082015292915050565b600060e0823603121561225257600080fd5b61225a611cd6565b82358152602083013567ffffffffffffffff81111561227857600080fd5b612284368286016121aa565b6020830152506122973660408501611de4565b60408201526122a860a08401611ec4565b6060820152611ff560c08401611eed565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611ccc57600080fd5b6000610c5f36836121aa565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261235860c0850182611a7f565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261239160608401826122f9565b949350505050565b6000602082840312156123ab57600080fd5b5051919050565b6000602082840312156123c457600080fd5b611adc82611ec4565b600084516123df818460208901611a5b565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161241b816001850160208a01611a5b565b60019201918201528351612436816002840160208801611a5b565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247857600080fd5b83018035915067ffffffffffffffff82111561249357600080fd5b6020019150600581901b36038213156119f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124e057600080fd5b83018035915067ffffffffffffffff8211156124fb57600080fd5b60200191506060810236038213156119f957600080fd5b60006060828403121561252457600080fd5b611adc8383611de4565b60006020828403121561254057600080fd5b611adc82611eed565b6000612557611e7084611d71565b80848252602080830192508560051b85013681111561257557600080fd5b855b818110156125b157803567ffffffffffffffff8111156125975760008081fd5b6125a336828a016121aa565b865250938201938201612577565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561268a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126788486516122f9565b948e01949350918d019160010161263e565b505050978a0197945050918801916001016125e4565b50919a9950505050505050505050565b600060208083850312156126c357600080fd5b825167ffffffffffffffff8111156126da57600080fd5b8301601f810185136126eb57600080fd5b80516126f9611e7082611d71565b81815260059190911b8201830190838101908783111561271857600080fd5b928401925b828410156127365783518252928401929084019061271d565b979650505050505050565b6000610100828403121561275457600080fd5b61275c611cd6565b8235815261276d8460208501611d95565b602082015261277f8460608501611de4565b604082015261279060c08401611ec4565b60608201526127a160e08401611eed565b60808201529392505050565b6000604082840312156127bf57600080fd5b611adc8383611d95565b60008251611ccc818460208701611a5b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/telos/.chainId",
    "content": "40\n"
  },
  {
    "path": "deployments/telos/.migrations.json",
    "content": "{\n  \"000001-registry\": 1732315140,\n  \"000002-eas\": 1732315151,\n  \"000003-register-initial-schemas\": 1732315795,\n  \"000004-name-initial-schemas\": 1732316219,\n  \"000005-eip712-proxy\": 1732316245,\n  \"000006-indexer\": 1732316254\n}"
  },
  {
    "path": "deployments/telos/EAS.json",
    "content": "{\n  \"address\": \"0x9898C3FF2fdCA9E734556fC4BCCd5b9239218155\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressInsufficientBalance\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"FailedInnerCall\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb2a301d44167b4b3f8700838e3cf5daf45777f78f15ff6c59f577441b6c96e94\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xcc9F85968220873F7D988e7e5b5bc1F7D76E27E8\",\n    \"contractAddress\": \"0x9898C3FF2fdCA9E734556fC4BCCd5b9239218155\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"4150437\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x6b3e5d6a64dc16f6a5dbcf73b402ffcd212e7dc203a3e0037f602e9c39dab51d\",\n    \"transactionHash\": \"0xb2a301d44167b4b3f8700838e3cf5daf45777f78f15ff6c59f577441b6c96e94\",\n    \"logs\": [],\n    \"blockNumber\": 374675774,\n    \"cumulativeGasUsed\": \"4150437\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x842511adC21B85C0B2fdB02AAcFA92fdf7Cda470\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"registry\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressInsufficientBalance\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevoked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyRevokedOffchain\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyTimestamped\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"FailedInnerCall\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InsufficientValue\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidExpirationTime\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidNonce\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRegistry\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidRevocations\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidVerifier\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"Irrevocable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotPayable\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WrongSchema\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Attested\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldNonce\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NonceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Revoked\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"RevokedOffchain\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Timestamped\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct AttestationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttestation\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"time\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"revocationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct Attestation\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getNonce\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getSchemaRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISchemaRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newNonce\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseNonce\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationValid\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiAttestationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"internalType\\\":\\\"struct MultiRevocationRequest[]\\\",\\\"name\\\":\\\"multiRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiRevokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"multiTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct RevocationRequest\\\",\\\"name\\\":\\\"request\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revoke\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"revokeOffchain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"timestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"AddressInsufficientBalance(address)\\\":[{\\\"details\\\":\\\"The ETH balance of the account is not enough to perform the operation.\\\"}],\\\"FailedInnerCall()\\\":[{\\\"details\\\":\\\"A call to an address target failed. The target may have reverted.\\\"}]},\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID of the new attestation.\\\"}},\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The new value.\\\",\\\"oldNonce\\\":\\\"The previous nonce.\\\"}},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attesting account.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"uid\\\":\\\"The UID the revoked attestation.\\\"}},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"revoker\\\":\\\"The address of the revoker.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}},\\\"Timestamped(bytes32,uint64)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data.\\\",\\\"timestamp\\\":\\\"The timestamp.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attest({         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",         data: {             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",             expirationTime: 0,             revocable: true,             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",             data: \\\\\\\"0xF00D\\\\\\\",             value: 0         }     })\\\"}},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EAS instance.\\\",\\\"params\\\":{\\\"registry\\\":\\\"The address of the global schema registry.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"getAttestTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the attest function.\\\"}},\\\"getAttestation(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The attestation data members.\\\"}},\\\"getDomainSeparator()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The domain separator used in the encoding of the signatures for attest, and revoke.\\\"}},\\\"getName()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 name.\\\"}},\\\"getNonce(address)\\\":{\\\"params\\\":{\\\"account\\\":\\\"The requested account.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The current nonce.\\\"}},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"getRevokeTypeHash()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The EIP712 type hash for the revoke function.\\\"}},\\\"getSchemaRegistry()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"The address of the global schema registry.\\\"}},\\\"getTimestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to query.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"increaseNonce(uint256)\\\":{\\\"params\\\":{\\\"newNonce\\\":\\\"The (higher) new value.\\\"}},\\\"isAttestationValid(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the attestation to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation exists.\\\"}},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\\\"}},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"params\\\":{\\\"multiRequests\\\":\\\"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"multiTimestamp(bytes32[])\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"params\\\":{\\\"request\\\":\\\"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"revokeOffchain(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was revoked with.\\\"}},\\\"timestamp(bytes32)\\\":{\\\"params\\\":{\\\"data\\\":\\\"The data to timestamp.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The timestamp the data was timestamped with.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EAS\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Attested(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been made.\\\"},\\\"NonceIncreased(uint256,uint256)\\\":{\\\"notice\\\":\\\"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"Revoked(address,address,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been revoked.\\\"},\\\"RevokedOffchain(address,bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been revoked.\\\"},\\\"Timestamped(bytes32,uint64)\\\":{\\\"notice\\\":\\\"Emitted when a data has been timestamped.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\\\":{\\\"notice\\\":\\\"Attests to a specific schema.\\\"},\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided ECDSA signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing attestation by UID.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getNonce(address)\\\":{\\\"notice\\\":\\\"Returns the current nonce per-account.\\\"},\\\"getRevokeOffchain(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"getSchemaRegistry()\\\":{\\\"notice\\\":\\\"Returns the address of the global schema registry.\\\"},\\\"getTimestamp(bytes32)\\\":{\\\"notice\\\":\\\"Returns the timestamp that the specified data was timestamped with.\\\"},\\\"increaseNonce(uint256)\\\":{\\\"notice\\\":\\\"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\"},\\\"isAttestationValid(bytes32)\\\":{\\\"notice\\\":\\\"Checks whether an attestation exists.\\\"},\\\"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided ECDSA signatures.\\\"},\\\"multiRevoke((bytes32,(bytes32,uint256)[])[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\"},\\\"multiRevokeOffchain(bytes32[])\\\":{\\\"notice\\\":\\\"Revokes the specified multiple bytes32 data.\\\"},\\\"multiTimestamp(bytes32[])\\\":{\\\"notice\\\":\\\"Timestamps the specified multiple bytes32 data.\\\"},\\\"revoke((bytes32,(bytes32,uint256)))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\"},\\\"revokeOffchain(bytes32)\\\":{\\\"notice\\\":\\\"Revokes the specified bytes32 data.\\\"},\\\"timestamp(bytes32)\\\":{\\\"notice\\\":\\\"Timestamps the specified bytes32 data.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The Ethereum Attestation Service protocol.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol\\\":\\\"EAS\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\n\\\\nimport { EIP1271Verifier } from \\\\\\\"./eip1271/EIP1271Verifier.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    EMPTY_UID,\\\\n    InvalidLength,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    Attestation,\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiDelegatedAttestationRequest,\\\\n    MultiDelegatedRevocationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"./IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title EAS\\\\n/// @notice The Ethereum Attestation Service protocol.\\\\ncontract EAS is IEAS, Semver, EIP1271Verifier {\\\\n    using Address for address payable;\\\\n\\\\n    error AlreadyRevoked();\\\\n    error AlreadyRevokedOffchain();\\\\n    error AlreadyTimestamped();\\\\n    error InsufficientValue();\\\\n    error InvalidAttestation();\\\\n    error InvalidAttestations();\\\\n    error InvalidExpirationTime();\\\\n    error InvalidOffset();\\\\n    error InvalidRegistry();\\\\n    error InvalidRevocation();\\\\n    error InvalidRevocations();\\\\n    error InvalidSchema();\\\\n    error InvalidVerifier();\\\\n    error Irrevocable();\\\\n    error NotPayable();\\\\n    error WrongSchema();\\\\n\\\\n    /// @notice A struct representing an internal attestation result.\\\\n    struct AttestationsResult {\\\\n        uint256 usedValue; // Total ETH amount that was sent to resolvers.\\\\n        bytes32[] uids; // UIDs of the new attestations.\\\\n    }\\\\n\\\\n    // The global schema registry.\\\\n    ISchemaRegistry private immutable _schemaRegistry;\\\\n\\\\n    // The global mapping between attestations and their UIDs.\\\\n    mapping(bytes32 uid => Attestation attestation) private _db;\\\\n\\\\n    // The global mapping between data and their timestamps.\\\\n    mapping(bytes32 data => uint64 timestamp) private _timestamps;\\\\n\\\\n    // The global mapping between data and their revocation timestamps.\\\\n    mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\\\\n\\\\n    /// @dev Creates a new EAS instance.\\\\n    /// @param registry The address of the global schema registry.\\\\n    constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\\\\\\\"EAS\\\\\\\", \\\\\\\"1.3.0\\\\\\\") {\\\\n        if (address(registry) == address(0)) {\\\\n            revert InvalidRegistry();\\\\n        }\\\\n\\\\n        _schemaRegistry = registry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry) {\\\\n        return _schemaRegistry;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32) {\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        AttestationRequestData[] memory data = new AttestationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            MultiAttestationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure that data isn't empty.\\\\n            if (multiRequest.data.length == 0) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            AttestationsResult memory res = _attest(\\\\n                multiRequest.schema,\\\\n                multiRequest.data,\\\\n                msg.sender,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory) {\\\\n        // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\\\\n        // all the returned UIDs into a single list.\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        bytes32[][] memory totalUIDs = new bytes32[][](length);\\\\n        uint256 totalUIDCount = 0;\\\\n\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Process the current batch of attestations.\\\\n            AttestationsResult memory res = _attest(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.attester,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= res.usedValue;\\\\n\\\\n            // Collect UIDs (and merge them later).\\\\n            totalUIDs[i] = res.uids;\\\\n            unchecked {\\\\n                totalUIDCount += res.uids.length;\\\\n            }\\\\n        }\\\\n\\\\n        // Merge all the collected UIDs and return them as a flatten array.\\\\n        return _mergeUIDs(totalUIDs, totalUIDCount);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revoke(RevocationRequest calldata request) external payable {\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = request.data;\\\\n\\\\n        _revoke(request.schema, data, msg.sender, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        RevocationRequestData[] memory data = new RevocationRequestData[](1);\\\\n        data[0] = delegatedRequest.data;\\\\n\\\\n        _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiRevocationRequest calldata multiRequest = multiRequests[i];\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable {\\\\n        // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\\\\n        // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\\\\n        // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\\\\n        // possible to send too much ETH anyway.\\\\n        uint256 availableValue = msg.value;\\\\n\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\\\\n            // is a remainder - it will be refunded back to the attester (something that we can only verify during the\\\\n            // last and final batch).\\\\n            bool last;\\\\n            unchecked {\\\\n                last = i == length - 1;\\\\n            }\\\\n\\\\n            MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyRevoke(\\\\n                    DelegatedRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\\\\n            availableValue -= _revoke(\\\\n                multiDelegatedRequest.schema,\\\\n                data,\\\\n                multiDelegatedRequest.revoker,\\\\n                availableValue,\\\\n                last\\\\n            );\\\\n        }\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function timestamp(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _timestamp(data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function revokeOffchain(bytes32 data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        _revokeOffchain(msg.sender, data, time);\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _revokeOffchain(msg.sender, data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\\\\n        uint64 time = _time();\\\\n\\\\n        uint256 length = data.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _timestamp(data[i], time);\\\\n        }\\\\n\\\\n        return time;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory) {\\\\n        return _db[uid];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function isAttestationValid(bytes32 uid) public view returns (bool) {\\\\n        return _db[uid].uid != EMPTY_UID;\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getTimestamp(bytes32 data) external view returns (uint64) {\\\\n        return _timestamps[data];\\\\n    }\\\\n\\\\n    /// @inheritdoc IEAS\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\\\\n        return _revocationsOffchain[revoker][data];\\\\n    }\\\\n\\\\n    /// @dev Attests to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the attestation requests.\\\\n    /// @param attester The attesting account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return The UID of the new attestations and the total sent ETH amount.\\\\n    function _attest(\\\\n        bytes32 schemaUID,\\\\n        AttestationRequestData[] memory data,\\\\n        address attester,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (AttestationsResult memory) {\\\\n        uint256 length = data.length;\\\\n\\\\n        AttestationsResult memory res;\\\\n        res.uids = new bytes32[](length);\\\\n\\\\n        // Ensure that we aren't attempting to attest to a non-existing schema.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            AttestationRequestData memory request = data[i];\\\\n\\\\n            // Ensure that either no expiration time was set or that it was set in the future.\\\\n            if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\\\\n                revert InvalidExpirationTime();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\\\\n            if (!schemaRecord.revocable && request.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            Attestation memory attestation = Attestation({\\\\n                uid: EMPTY_UID,\\\\n                schema: schemaUID,\\\\n                refUID: request.refUID,\\\\n                time: _time(),\\\\n                expirationTime: request.expirationTime,\\\\n                revocationTime: 0,\\\\n                recipient: request.recipient,\\\\n                attester: attester,\\\\n                revocable: request.revocable,\\\\n                data: request.data\\\\n            });\\\\n\\\\n            // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\\\\n            bytes32 uid;\\\\n            uint32 bump = 0;\\\\n            while (true) {\\\\n                uid = _getUID(attestation, bump);\\\\n                if (_db[uid].uid == EMPTY_UID) {\\\\n                    break;\\\\n                }\\\\n\\\\n                unchecked {\\\\n                    ++bump;\\\\n                }\\\\n            }\\\\n            attestation.uid = uid;\\\\n\\\\n            _db[uid] = attestation;\\\\n\\\\n            if (request.refUID != EMPTY_UID) {\\\\n                // Ensure that we aren't trying to attest to a non-existing referenced UID.\\\\n                if (!isAttestationValid(request.refUID)) {\\\\n                    revert NotFound();\\\\n                }\\\\n            }\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            res.uids[i] = uid;\\\\n\\\\n            emit Attested(request.recipient, attester, uid, schemaUID);\\\\n        }\\\\n\\\\n        res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\\\\n\\\\n        return res;\\\\n    }\\\\n\\\\n    /// @dev Revokes an existing attestation to a specific schema.\\\\n    /// @param schemaUID The unique identifier of the schema to attest to.\\\\n    /// @param data The arguments of the revocation requests.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _revoke(\\\\n        bytes32 schemaUID,\\\\n        RevocationRequestData[] memory data,\\\\n        address revoker,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        // Ensure that a non-existing schema ID wasn't passed by accident.\\\\n        SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\\\\n        if (schemaRecord.uid == EMPTY_UID) {\\\\n            revert InvalidSchema();\\\\n        }\\\\n\\\\n        uint256 length = data.length;\\\\n        Attestation[] memory attestations = new Attestation[](length);\\\\n        uint256[] memory values = new uint256[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            RevocationRequestData memory request = data[i];\\\\n\\\\n            Attestation storage attestation = _db[request.uid];\\\\n\\\\n            // Ensure that we aren't attempting to revoke a non-existing attestation.\\\\n            if (attestation.uid == EMPTY_UID) {\\\\n                revert NotFound();\\\\n            }\\\\n\\\\n            // Ensure that a wrong schema ID wasn't passed by accident.\\\\n            if (attestation.schema != schemaUID) {\\\\n                revert InvalidSchema();\\\\n            }\\\\n\\\\n            // Allow only original attesters to revoke their attestations.\\\\n            if (attestation.attester != revoker) {\\\\n                revert AccessDenied();\\\\n            }\\\\n\\\\n            // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\\\\n            // make revocable attestations to an irrevocable schema.\\\\n            if (!attestation.revocable) {\\\\n                revert Irrevocable();\\\\n            }\\\\n\\\\n            // Ensure that we aren't trying to revoke the same attestation twice.\\\\n            if (attestation.revocationTime != 0) {\\\\n                revert AlreadyRevoked();\\\\n            }\\\\n            attestation.revocationTime = _time();\\\\n\\\\n            attestations[i] = attestation;\\\\n            values[i] = request.value;\\\\n\\\\n            emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\\\\n        }\\\\n\\\\n        return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\\\\n    }\\\\n\\\\n    /// @dev Resolves a new attestation or a revocation of an existing attestation.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestation The data of the attestation to make/revoke.\\\\n    /// @param value An explicit ETH amount to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestation(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation memory attestation,\\\\n        uint256 value,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            if (value != 0) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n        if (value != 0) {\\\\n            if (!resolver.isPayable()) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.revoke{ value: value }(attestation)) {\\\\n                revert InvalidRevocation();\\\\n            }\\\\n        } else if (!resolver.attest{ value: value }(attestation)) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return value;\\\\n    }\\\\n\\\\n    /// @dev Resolves multiple attestations or revocations of existing attestations.\\\\n    /// @param schemaRecord The schema of the attestation.\\\\n    /// @param attestations The data of the attestations to make/revoke.\\\\n    /// @param values Explicit ETH amounts to send to the resolver.\\\\n    /// @param isRevocation Whether to resolve an attestation or its revocation.\\\\n    /// @param availableValue The total available ETH amount that can be sent to the resolver.\\\\n    /// @param last Whether this is the last attestations/revocations set.\\\\n    /// @return Returns the total sent ETH amount.\\\\n    function _resolveAttestations(\\\\n        SchemaRecord memory schemaRecord,\\\\n        Attestation[] memory attestations,\\\\n        uint256[] memory values,\\\\n        bool isRevocation,\\\\n        uint256 availableValue,\\\\n        bool last\\\\n    ) private returns (uint256) {\\\\n        uint256 length = attestations.length;\\\\n        if (length == 1) {\\\\n            return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\\\\n        }\\\\n\\\\n        ISchemaResolver resolver = schemaRecord.resolver;\\\\n        if (address(resolver) == address(0)) {\\\\n            // Ensure that we don't accept payments if there is no resolver.\\\\n            for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n                if (values[i] != 0) {\\\\n                    revert NotPayable();\\\\n                }\\\\n            }\\\\n\\\\n            if (last) {\\\\n                _refund(availableValue);\\\\n            }\\\\n\\\\n            return 0;\\\\n        }\\\\n\\\\n        uint256 totalUsedValue = 0;\\\\n        bool isResolverPayable = resolver.isPayable();\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            uint256 value = values[i];\\\\n\\\\n            // Ensure that we don't accept payments which can't be forwarded to the resolver.\\\\n            if (value == 0) {\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isResolverPayable) {\\\\n                revert NotPayable();\\\\n            }\\\\n\\\\n            // Ensure that the attester/revoker doesn't try to spend more than available.\\\\n            if (value > availableValue) {\\\\n                revert InsufficientValue();\\\\n            }\\\\n\\\\n            // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\\\\n            unchecked {\\\\n                availableValue -= value;\\\\n                totalUsedValue += value;\\\\n            }\\\\n        }\\\\n\\\\n        if (isRevocation) {\\\\n            if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\\\\n                revert InvalidRevocations();\\\\n            }\\\\n        } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\\\\n            revert InvalidAttestations();\\\\n        }\\\\n\\\\n        if (last) {\\\\n            _refund(availableValue);\\\\n        }\\\\n\\\\n        return totalUsedValue;\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given attestation.\\\\n    /// @param attestation The input attestation.\\\\n    /// @param bump A bump value to use in case of a UID conflict.\\\\n    /// @return Attestation UID.\\\\n    function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\\\\n        return\\\\n            keccak256(\\\\n                abi.encodePacked(\\\\n                    attestation.schema,\\\\n                    attestation.recipient,\\\\n                    attestation.attester,\\\\n                    attestation.time,\\\\n                    attestation.expirationTime,\\\\n                    attestation.revocable,\\\\n                    attestation.refUID,\\\\n                    attestation.data,\\\\n                    bump\\\\n                )\\\\n            );\\\\n    }\\\\n\\\\n    /// @dev Refunds remaining ETH amount to the attester.\\\\n    /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\\\\n    function _refund(uint256 remainingValue) private {\\\\n        if (remainingValue > 0) {\\\\n            // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\\\\n            // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\\\\n            // apply for.\\\\n            payable(msg.sender).sendValue(remainingValue);\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @param time The timestamp.\\\\n    function _timestamp(bytes32 data, uint64 time) private {\\\\n        if (_timestamps[data] != 0) {\\\\n            revert AlreadyTimestamped();\\\\n        }\\\\n\\\\n        _timestamps[data] = time;\\\\n\\\\n        emit Timestamped(data, time);\\\\n    }\\\\n\\\\n    /// @dev Revokes the specified bytes32 data.\\\\n    /// @param revoker The revoking account.\\\\n    /// @param data The data to revoke.\\\\n    /// @param time The timestamp the data was revoked with.\\\\n    function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\\\\n        mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\\\\n\\\\n        if (revocations[data] != 0) {\\\\n            revert AlreadyRevokedOffchain();\\\\n        }\\\\n\\\\n        revocations[data] = time;\\\\n\\\\n        emit RevokedOffchain(revoker, data, time);\\\\n    }\\\\n\\\\n    /// @dev Merges lists of UIDs.\\\\n    /// @param uidLists The provided lists of UIDs.\\\\n    /// @param uidCount Total UID count.\\\\n    /// @return A merged and flatten list of all the UIDs.\\\\n    function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\\\\n        bytes32[] memory uids = new bytes32[](uidCount);\\\\n\\\\n        uint256 currentIndex = 0;\\\\n        uint256 uidListLength = uidLists.length;\\\\n        for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\\\\n            bytes32[] memory currentUIDs = uidLists[i];\\\\n            uint256 currentUIDsLength = currentUIDs.length;\\\\n            for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\\\\n                uids[currentIndex] = currentUIDs[j];\\\\n\\\\n                unchecked {\\\\n                    ++currentIndex;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x60d59e039e6ec40887e8a946f516b55997d689212c44a89f434119535dd9a3c4\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip1271/EIP1271Verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \\\\\\\"./../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequestData,\\\\n    DelegatedAttestationRequest,\\\\n    DelegatedRevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../IEAS.sol\\\\\\\";\\\\n\\\\n/// @title EIP1271Verifier\\\\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\\\\nabstract contract EIP1271Verifier is EIP712 {\\\\n    using Address for address;\\\\n\\\\n    error InvalidNonce();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // Replay protection nonces.\\\\n    mapping(address attester => uint256 nonce) private _nonces;\\\\n\\\\n    /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param oldNonce The previous nonce.\\\\n    /// @param newNonce The new value.\\\\n    event NonceIncreased(uint256 oldNonce, uint256 newNonce);\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param version The current major version of the signing domain\\\\n    constructor(string memory name, string memory version) EIP712(name, version) {\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// @notice Returns the current nonce per-account.\\\\n    /// @param account The requested account.\\\\n    /// @return The current nonce.\\\\n    function getNonce(address account) external view returns (uint256) {\\\\n        return _nonces[account];\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the attest function.\\\\n    /// @return The EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 type hash for the revoke function.\\\\n    /// @return The EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_TYPEHASH;\\\\n    }\\\\n\\\\n    /// @notice Returns the EIP712 name.\\\\n    /// @return The EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\\\\n    /// @param newNonce The (higher) new value.\\\\n    function increaseNonce(uint256 newNonce) external {\\\\n        uint256 oldNonce = _nonces[msg.sender];\\\\n        if (newNonce <= oldNonce) {\\\\n            revert InvalidNonce();\\\\n        }\\\\n\\\\n        _nonces[msg.sender] = newNonce;\\\\n\\\\n        emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    _nonces[request.attester]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.attester,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        bytes32 hash = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    _nonces[request.revoker]++,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n        if (\\\\n            !SignatureChecker.isValidSignatureNow(\\\\n                request.revoker,\\\\n                hash,\\\\n                abi.encodePacked(signature.r, signature.s, signature.v)\\\\n            )\\\\n        ) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x590977110db1256cc00416bdf74eb8264a0eda358ccded303610369a2930b614\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\\\n     */\\\\n    error AddressInsufficientBalance(address account);\\\\n\\\\n    /**\\\\n     * @dev There's no code at `target` (it is not a contract).\\\\n     */\\\\n    error AddressEmptyCode(address target);\\\\n\\\\n    /**\\\\n     * @dev A call to an address target failed. The target may have reverted.\\\\n     */\\\\n    error FailedInnerCall();\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        if (address(this).balance < amount) {\\\\n            revert AddressInsufficientBalance(address(this));\\\\n        }\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        if (!success) {\\\\n            revert FailedInnerCall();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\\\n     * up by this function (like regular Solidity function calls). However, if\\\\n     * the call reverted with no returned reason, this function reverts with a\\\\n     * {FailedInnerCall} error.\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        if (address(this).balance < value) {\\\\n            revert AddressInsufficientBalance(address(this));\\\\n        }\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\\\n     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\\\\n     * unsuccessful call.\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata\\\\n    ) internal view returns (bytes memory) {\\\\n        if (!success) {\\\\n            _revert(returndata);\\\\n        } else {\\\\n            // only check if target is a contract if the call was successful and the return data is empty\\\\n            // otherwise we already know that it was a contract\\\\n            if (returndata.length == 0 && target.code.length == 0) {\\\\n                revert AddressEmptyCode(target);\\\\n            }\\\\n            return returndata;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\\\n     * revert reason or with a default {FailedInnerCall} error.\\\\n     */\\\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\\\n        if (!success) {\\\\n            _revert(returndata);\\\\n        } else {\\\\n            return returndata;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\\\\n     */\\\\n    function _revert(bytes memory returndata) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert FailedInnerCall();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {ECDSA} from \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport {IERC1271} from \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Safe Wallet (previously Gnosis Safe).\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6b11eb41a228cca35d4b662b4df69fcd75192851365102690f57b2ac01e83fe6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051614e58380380614e58833981016040819052610030916101f3565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c081905290919082908290610088908390610179565b61018052610097816001610179565b6101a0528151602080840191909120610140528151908201206101605246610100526101276101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e05250503061012052600261013d83826102c2565b5050506001600160a01b038116610167576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c0526103f2565b60006020835110156101955761018e836101ac565b90506101a6565b816101a084826102c2565b5060ff90505b92915050565b600080829050601f815111156101e0578260405163305a27a960e01b81526004016101d79190610380565b60405180910390fd5b80516101eb826103ce565b179392505050565b60006020828403121561020557600080fd5b81516001600160a01b038116811461021c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061024d57607f821691505b60208210810361026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bd57806000526020600020601f840160051c8101602085101561029a5750805b601f840160051c820191505b818110156102ba57600081556001016102a6565b50505b505050565b81516001600160401b038111156102db576102db610223565b6102ef816102e98454610239565b84610273565b6020601f821160018114610323576000831561030b5750848201515b600019600385901b1c1916600184901b1784556102ba565b600084815260208120601f198516915b828110156103535787850151825560209485019460019092019101610333565b50848210156103715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156103ae5760208186018101516040868401015201610391565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561026d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149d261048660003960008181610538015281816115c10152611ef901526000612824015260006127f70152600061293101526000612909015260006128640152600061288e015260006128b801526000610c3401526000610c0b01526000610be201526149d26000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"AddressInsufficientBalance(address)\": [\n        {\n          \"details\": \"The ETH balance of the account is not enough to perform the operation.\"\n        }\n      ],\n      \"FailedInnerCall()\": [\n        {\n          \"details\": \"A call to an address target failed. The target may have reverted.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID of the new attestation.\"\n        }\n      },\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The new value.\",\n          \"oldNonce\": \"The previous nonce.\"\n        }\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attesting account.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"uid\": \"The UID the revoked attestation.\"\n        }\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"revoker\": \"The address of the revoker.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"params\": {\n          \"data\": \"The data.\",\n          \"timestamp\": \"The timestamp.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attest({         schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",         data: {             recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",             expirationTime: 0,             revocable: true,             refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",             data: \\\"0xF00D\\\",             value: 0         }     })\"\n        }\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EAS instance.\",\n        \"params\": {\n          \"registry\": \"The address of the global schema registry.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the attest function.\"\n        }\n      },\n      \"getAttestation(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The attestation data members.\"\n        }\n      },\n      \"getDomainSeparator()\": {\n        \"returns\": {\n          \"_0\": \"The domain separator used in the encoding of the signatures for attest, and revoke.\"\n        }\n      },\n      \"getName()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 name.\"\n        }\n      },\n      \"getNonce(address)\": {\n        \"params\": {\n          \"account\": \"The requested account.\"\n        },\n        \"returns\": {\n          \"_0\": \"The current nonce.\"\n        }\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"getRevokeTypeHash()\": {\n        \"returns\": {\n          \"_0\": \"The EIP712 type hash for the revoke function.\"\n        }\n      },\n      \"getSchemaRegistry()\": {\n        \"returns\": {\n          \"_0\": \"The address of the global schema registry.\"\n        }\n      },\n      \"getTimestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to query.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"increaseNonce(uint256)\": {\n        \"params\": {\n          \"newNonce\": \"The (higher) new value.\"\n        }\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the attestation to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation exists.\"\n        }\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi attestation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttest([{         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 1000         },         {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 0,             revocable: false,             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',             data: '0x00',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: true,             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',             data: '0x12345678',             value: 0         },     }])\"\n        }\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"params\": {\n          \"multiRequests\": \"The arguments of the multi revocation requests. The requests should be grouped by distinct     schema ids to benefit from the best batching optimization. Example:     multiRevoke([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],     },     {         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',         data: [{             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',             value: 0         },     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"params\": {\n          \"request\": \"The arguments of the revocation request. Example:     revoke({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',             value: 0         }     })\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was revoked with.\"\n        }\n      },\n      \"timestamp(bytes32)\": {\n        \"params\": {\n          \"data\": \"The data to timestamp.\"\n        },\n        \"returns\": {\n          \"_0\": \"The timestamp the data was timestamped with.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EAS\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Attested(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been made.\"\n      },\n      \"NonceIncreased(uint256,uint256)\": {\n        \"notice\": \"Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"Revoked(address,address,bytes32,bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been revoked.\"\n      },\n      \"RevokedOffchain(address,bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been revoked.\"\n      },\n      \"Timestamped(bytes32,uint64)\": {\n        \"notice\": \"Emitted when a data has been timestamped.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": {\n        \"notice\": \"Attests to a specific schema.\"\n      },\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided ECDSA signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttestation(bytes32)\": {\n        \"notice\": \"Returns an existing attestation by UID.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getNonce(address)\": {\n        \"notice\": \"Returns the current nonce per-account.\"\n      },\n      \"getRevokeOffchain(address,bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"getSchemaRegistry()\": {\n        \"notice\": \"Returns the address of the global schema registry.\"\n      },\n      \"getTimestamp(bytes32)\": {\n        \"notice\": \"Returns the timestamp that the specified data was timestamped with.\"\n      },\n      \"increaseNonce(uint256)\": {\n        \"notice\": \"Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\"\n      },\n      \"isAttestationValid(bytes32)\": {\n        \"notice\": \"Checks whether an attestation exists.\"\n      },\n      \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": {\n        \"notice\": \"Attests to multiple schemas.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided ECDSA signatures.\"\n      },\n      \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided ECDSA signatures.\"\n      },\n      \"multiRevokeOffchain(bytes32[])\": {\n        \"notice\": \"Revokes the specified multiple bytes32 data.\"\n      },\n      \"multiTimestamp(bytes32[])\": {\n        \"notice\": \"Timestamps the specified multiple bytes32 data.\"\n      },\n      \"revoke((bytes32,(bytes32,uint256)))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided ECDSA signature.\"\n      },\n      \"revokeOffchain(bytes32)\": {\n        \"notice\": \"Revokes the specified bytes32 data.\"\n      },\n      \"timestamp(bytes32)\": {\n        \"notice\": \"Timestamps the specified bytes32 data.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The Ethereum Attestation Service protocol.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3169,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3173,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_nonces\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 155,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_db\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Attestation)49_storage)\"\n      },\n      {\n        \"astId\": 159,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_timestamps\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      {\n        \"astId\": 165,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n        \"label\": \"_revocationsOffchain\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => uint64))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_uint64)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Attestation)49_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Attestation)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Attestation)49_storage\"\n      },\n      \"t_mapping(t_bytes32,t_uint64)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => uint64)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint64\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Attestation)49_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Attestation\",\n        \"members\": [\n          {\n            \"astId\": 30,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 32,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 34,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"time\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 36,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"expirationTime\",\n            \"offset\": 8,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 38,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"revocationTime\",\n            \"offset\": 16,\n            \"slot\": \"2\",\n            \"type\": \"t_uint64\"\n          },\n          {\n            \"astId\": 40,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"refUID\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 42,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"recipient\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 44,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"attester\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 46,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"5\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 48,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/EAS.sol:EAS\",\n            \"label\": \"data\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_bytes_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"224\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint64\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint64\",\n        \"numberOfBytes\": \"8\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/telos/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0xA76973759A350D4D7EC7aF042c6c2A32be861AD9\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc8a81671aec87fab116763d311f54bff5ade792725e7952d76ec7f891b335134\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xcc9F85968220873F7D988e7e5b5bc1F7D76E27E8\",\n    \"contractAddress\": \"0xA76973759A350D4D7EC7aF042c6c2A32be861AD9\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"2297224\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x96073557f0c3f6ee616ebc180f9c374874ca1796086101a8c6e837b669ef00ac\",\n    \"transactionHash\": \"0xc8a81671aec87fab116763d311f54bff5ade792725e7952d76ec7f891b335134\",\n    \"logs\": [],\n    \"blockNumber\": 374677962,\n    \"cumulativeGasUsed\": \"2297224\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x9898C3FF2fdCA9E734556fC4BCCd5b9239218155\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\\\\\"1.4.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != request.revoker) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3573,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 3581,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/telos/Indexer.json",
    "content": "{\n  \"address\": \"0x6Abe1F9489B97d9f11E1347567f61137BC61B6F9\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x6cbbea7a2f0f7576648214fba5e810874e37773fcbe0188f84363ce26c712857\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xcc9F85968220873F7D988e7e5b5bc1F7D76E27E8\",\n    \"contractAddress\": \"0x6Abe1F9489B97d9f11E1347567f61137BC61B6F9\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"989460\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x71c24475fdf72e521855e98bfca5008f0df6b261f9f2d792525b6982b69aa1df\",\n    \"transactionHash\": \"0x6cbbea7a2f0f7576648214fba5e810874e37773fcbe0188f84363ce26c712857\",\n    \"logs\": [],\n    \"blockNumber\": 374677981,\n    \"cumulativeGasUsed\": \"989460\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x9898C3FF2fdCA9E734556fC4BCCd5b9239218155\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2421,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2428,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 2442,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 2446,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/telos/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x842511adC21B85C0B2fdB02AAcFA92fdf7Cda470\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb103a4ac1548edf73bf0fe1d60009ff8a4db19f7f773d7626904237a91db361c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xcc9F85968220873F7D988e7e5b5bc1F7D76E27E8\",\n    \"contractAddress\": \"0x842511adC21B85C0B2fdB02AAcFA92fdf7Cda470\",\n    \"transactionIndex\": 0,\n    \"gasUsed\": \"641746\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xa6d763d170da229bb3a602bb3c72a7117f1365615ba844f292a58dfe76893210\",\n    \"transactionHash\": \"0xb103a4ac1548edf73bf0fe1d60009ff8a4db19f7f773d7626904237a91db361c\",\n    \"logs\": [],\n    \"blockNumber\": 374675753,\n    \"cumulativeGasUsed\": \"641746\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AlreadyExists\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registerer\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"indexed\\\":false,\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"Registered\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchema\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct SchemaRecord\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"contract ISchemaResolver\\\",\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"params\\\":{\\\"registerer\\\":\\\"The address of the account used to register the schema.\\\",\\\"schema\\\":\\\"The schema data.\\\",\\\"uid\\\":\\\"The schema UID.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new SchemaRegistry instance.\\\"},\\\"getSchema(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID of the schema to retrieve.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The schema data members.\\\"}},\\\"register(string,address,bool)\\\":{\\\"params\\\":{\\\"resolver\\\":\\\"An optional schema resolver.\\\",\\\"revocable\\\":\\\"Whether the schema allows revocations explicitly.\\\",\\\"schema\\\":\\\"The schema data schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new schema.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"SchemaRegistry\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Registered(bytes32,address,(bytes32,address,bool,string))\\\":{\\\"notice\\\":\\\"Emitted when a new schema has been registered\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getSchema(bytes32)\\\":{\\\"notice\\\":\\\"Returns an existing schema by UID\\\"},\\\"register(string,address,bool)\\\":{\\\"notice\\\":\\\"Submits and reserves a new schema\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"The global schema registry.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol\\\":\\\"SchemaRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\nimport { EMPTY_UID } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\nimport { ISchemaRegistry, SchemaRecord } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\n\\\\n/// @title SchemaRegistry\\\\n/// @notice The global schema registry.\\\\ncontract SchemaRegistry is ISchemaRegistry, Semver {\\\\n    error AlreadyExists();\\\\n\\\\n    // The global mapping between schema records and their IDs.\\\\n    mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\\\\n\\\\n    /// @dev Creates a new SchemaRegistry instance.\\\\n    constructor() Semver(1, 3, 0) {}\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\\\\n        SchemaRecord memory schemaRecord = SchemaRecord({\\\\n            uid: EMPTY_UID,\\\\n            schema: schema,\\\\n            resolver: resolver,\\\\n            revocable: revocable\\\\n        });\\\\n\\\\n        bytes32 uid = _getUID(schemaRecord);\\\\n        if (_registry[uid].uid != EMPTY_UID) {\\\\n            revert AlreadyExists();\\\\n        }\\\\n\\\\n        schemaRecord.uid = uid;\\\\n        _registry[uid] = schemaRecord;\\\\n\\\\n        emit Registered(uid, msg.sender, schemaRecord);\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @inheritdoc ISchemaRegistry\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\\\\n        return _registry[uid];\\\\n    }\\\\n\\\\n    /// @dev Calculates a UID for a given schema.\\\\n    /// @param schemaRecord The input schema.\\\\n    /// @return schema UID.\\\\n    function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x03ba24da8053a6ace797cd2683971b4f4a55909adbb3928c57d9864b71ff0a56\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e0604052348015600f57600080fd5b506001608052600360a052600060c05260805160a05160c051610ab561004b600039600060fe0152600060d50152600060ac0152610ab56000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"params\": {\n          \"registerer\": \"The address of the account used to register the schema.\",\n          \"schema\": \"The schema data.\",\n          \"uid\": \"The schema UID.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new SchemaRegistry instance.\"\n      },\n      \"getSchema(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID of the schema to retrieve.\"\n        },\n        \"returns\": {\n          \"_0\": \"The schema data members.\"\n        }\n      },\n      \"register(string,address,bool)\": {\n        \"params\": {\n          \"resolver\": \"An optional schema resolver.\",\n          \"revocable\": \"Whether the schema allows revocations explicitly.\",\n          \"schema\": \"The schema data schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new schema.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"SchemaRegistry\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Registered(bytes32,address,(bytes32,address,bool,string))\": {\n        \"notice\": \"Emitted when a new schema has been registered\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getSchema(bytes32)\": {\n        \"notice\": \"Returns an existing schema by UID\"\n      },\n      \"register(string,address,bool)\": {\n        \"notice\": \"Submits and reserves a new schema\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"The global schema registry.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2959,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n        \"label\": \"_registry\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(SchemaRecord)2343_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(ISchemaResolver)4381\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISchemaResolver\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(SchemaRecord)2343_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct SchemaRecord)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(SchemaRecord)2343_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(SchemaRecord)2343_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct SchemaRecord\",\n        \"members\": [\n          {\n            \"astId\": 2335,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"uid\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 2338,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"resolver\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_contract(ISchemaResolver)4381\"\n          },\n          {\n            \"astId\": 2340,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"revocable\",\n            \"offset\": 20,\n            \"slot\": \"1\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 2342,\n            \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol:SchemaRegistry\",\n            \"label\": \"schema\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/telos/types/@ethereum-attestation-service/eas-contracts/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/telos/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/telos/types/@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/telos/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/telos/types/factories/@ethereum-attestation-service/eas-contracts/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EAS,\n  EASInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051614e58380380614e58833981016040819052610030916101f3565b60408051808201825260038082526245415360e81b602080840191909152835180850190945260058452640312e332e360dc1b90840152600160805260a052600060c081905290919082908290610088908390610179565b61018052610097816001610179565b6101a0528151602080840191909120610140528151908201206101605246610100526101276101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e05250503061012052600261013d83826102c2565b5050506001600160a01b038116610167576040516311a1e69760e01b815260040160405180910390fd5b6001600160a01b03166101c0526103f2565b60006020835110156101955761018e836101ac565b90506101a6565b816101a084826102c2565b5060ff90505b92915050565b600080829050601f815111156101e0578260405163305a27a960e01b81526004016101d79190610380565b60405180910390fd5b80516101eb826103ce565b179392505050565b60006020828403121561020557600080fd5b81516001600160a01b038116811461021c57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061024d57607f821691505b60208210810361026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bd57806000526020600020601f840160051c8101602085101561029a5750805b601f840160051c820191505b818110156102ba57600081556001016102a6565b50505b505050565b81516001600160401b038111156102db576102db610223565b6102ef816102e98454610239565b84610273565b6020601f821160018114610323576000831561030b5750848201515b600019600385901b1c1916600184901b1784556102ba565b600084815260208120601f198516915b828110156103535787850151825560209485019460019092019101610333565b50848210156103715786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156103ae5760208186018101516040868401015201610391565b506000604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561026d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516149d261048660003960008181610538015281816115c10152611ef901526000612824015260006127f70152600061293101526000612909015260006128640152600061288e015260006128b801526000610c3401526000610c0b01526000610be201526149d26000f3fe6080604052600436106101965760003560e01c806384b0196e116100e1578063cf190f341161008a578063e71ff36511610064578063e71ff365146104dc578063ed24911d146104fc578063f10b5cc814610511578063f17325e71461056257600080fd5b8063cf190f3414610446578063d45c443514610466578063e30bb5631461049d57600080fd5b8063a6d4dbc7116100bb578063a6d4dbc7146103a6578063b469318d146103b9578063b83010d31461041357600080fd5b806384b0196e1461033e5780639541152514610366578063a3112a641461037957600080fd5b806344adc90e116101435780634d0030701161011d5780634d003070146102e957806354fd4d501461030957806379f7573a1461031e57600080fd5b806344adc90e146102a357806346926267146102c35780634cb7e9e5146102d657600080fd5b806317d7de7c1161017457806317d7de7c1461022b5780632d0335ab1461024d5780633c0427151461029057600080fd5b80630eabf6601461019b57806312b11a17146101b057806313893f61146101f2575b600080fd5b6101ae6101a936600461378d565b610575565b005b3480156101bc57600080fd5b507ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d9880765b6040519081526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d36600461378d565b61070c565b60405167ffffffffffffffff90911681526020016101e9565b34801561023757600080fd5b50610240610751565b6040516101e9919061383d565b34801561025957600080fd5b506101df610268366004613889565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101df61029e3660046138a6565b6107e3565b6102b66102b136600461378d565b6108e6565b6040516101e991906138e1565b6101ae6102d1366004613924565b610a67565b6101ae6102e436600461378d565b610aeb565b3480156102f557600080fd5b5061021261030436600461393f565b610bce565b34801561031557600080fd5b50610240610bdb565b34801561032a57600080fd5b506101ae61033936600461393f565b610c7e565b34801561034a57600080fd5b50610353610d17565b6040516101e99796959493929190613994565b6102b661037436600461378d565b610d79565b34801561038557600080fd5b5061039961039436600461393f565b610fec565b6040516101e99190613b16565b6101ae6103b4366004613b29565b6111ae565b3480156103c557600080fd5b506102126103d4366004613b3d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205467ffffffffffffffff1690565b34801561041f57600080fd5b507fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e756101df565b34801561045257600080fd5b5061021261046136600461393f565b611253565b34801561047257600080fd5b5061021261048136600461393f565b60009081526005602052604090205467ffffffffffffffff1690565b3480156104a957600080fd5b506104cc6104b836600461393f565b600090815260046020526040902054151590565b60405190151581526020016101e9565b3480156104e857600080fd5b506102126104f736600461378d565b611261565b34801561050857600080fd5b506101df611299565b34801561051d57600080fd5b5060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e9565b6101df610570366004613b69565b6112a8565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811460008686848181106105bb576105bb613ba4565b90506020028101906105cd9190613bd3565b6105d690613e69565b60208101518051919250908015806105f357508260400151518114155b1561062a576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ce576106c66040518060a001604052808660000151815260200185848151811061065f5761065f613ba4565b602002602001015181526020018660400151848151811061068257610682613ba4565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff16815250611366565b60010161062d565b506106e483600001518385606001518a88611578565b6106ee9088613f99565b9650505050506106fe8160010190565b905061057a565b5050505050565b60004282825b818110156107455761073d3387878481811061073057610730613ba4565b9050602002013585611bc9565b600101610712565b50909150505b92915050565b60606002805461076090613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90613fac565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f66107f183614126565b611cc8565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161080d57905050905061087b60208401846141a1565b610884906141d5565b8160008151811061089757610897613ba4565b60209081029190910101526108c08335826108b860c0870160a08801613889565b346001611e53565b602001516000815181106108d6576108d6613ba4565b6020026020010151915050919050565b60608160008167ffffffffffffffff81111561090457610904613c11565b60405190808252806020026020018201604052801561093757816020015b60608152602001906001900390816109225790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850181143689898481811061097f5761097f613ba4565b905060200281019061099191906141e1565b90506109a06020820182614215565b90506000036109db576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a0082356109ef6020850185614215565b6109f89161427d565b338887611e53565b8051909150610a0f9086613f99565b94508060200151878581518110610a2857610a28613ba4565b602002602001018190525080602001515186019550505050610a4a8160010190565b905061093f565b50610a5c8383612586565b979650505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610a7e579050509050610ab9368390038301602084016142e3565b81600081518110610acc57610acc613ba4565b6020908102919091010152610ae682358233346001611578565b505050565b348160005b81811015610705577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610b3057610b30613ba4565b9050602002810190610b4291906141e1565b9050610baf8135610b5660208401846142ff565b808060200260200160405190810160405280939291908181526020016000905b82821015610ba257610b93604083028601368190038101906142e3565b81526020019060010190610b76565b5050505050338886611578565b610bb99086613f99565b94505050610bc78160010190565b9050610af0565b60004261074b8382612670565b6060610c067f0000000000000000000000000000000000000000000000000000000000000000612732565b610c2f7f0000000000000000000000000000000000000000000000000000000000000000612732565b610c587f0000000000000000000000000000000000000000000000000000000000000000612732565b604051602001610c6a93929190614367565b604051602081830303815290604052905090565b33600090815260036020526040902054808211610cc7576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602090815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b600060608060008060006060610d2b6127f0565b610d3361281d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff811115610d9757610d97613c11565b604051908082528060200260200182016040528015610dca57816020015b6060815260200190600190039081610db55790505b509050600034815b84811015610a51577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610e1257610e12613ba4565b9050602002810190610e249190613bd3565b9050366000610e366020840184614215565b909250905080801580610e575750610e5160408501856143fe565b90508114155b15610e8e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f6f57610f676040518060a0016040528087600001358152602001868685818110610ec357610ec3613ba4565b9050602002810190610ed591906141a1565b610ede906141d5565b8152602001610ef060408901896143fe565b85818110610f0057610f00613ba4565b905060600201803603810190610f169190614465565b8152602001610f2b6080890160608a01613889565b73ffffffffffffffffffffffffffffffffffffffff168152602001610f5660a0890160808a01614481565b67ffffffffffffffff169052611cc8565b600101610e91565b506000610f988535610f81858761427d565b610f916080890160608a01613889565b8b8a611e53565b8051909150610fa79089613f99565b975080602001518a8881518110610fc057610fc0613ba4565b602002602001018190525080602001515189019850505050505050610fe58160010190565b9050610dd2565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526004602081815260409283902083516101408101855281548152600182015492810192909252600281015467ffffffffffffffff808216958401959095526801000000000000000081048516606084015270010000000000000000000000000000000090049093166080820152600383015460a08201529082015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180549192916101208401919061112590613fac565b80601f016020809104026020016040519081016040528092919081815260200182805461115190613fac565b801561119e5780601f106111735761010080835404028352916020019161119e565b820191906000526020600020905b81548152906001019060200180831161118157829003601f168201915b5050505050815250509050919050565b6111c56111c03683900383018361449c565b611366565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816111dc579050509050611217368390038301602084016142e3565b8160008151811061122a5761122a613ba4565b6020908102919091010152610ae682358261124b60e0860160c08701613889565b346001611578565b60004261074b338483611bc9565b60004282825b818110156107455761129186868381811061128457611284613ba4565b9050602002013584612670565b600101611267565b60006112a361284a565b905090565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816112c257905050905061133060208401846141a1565b611339906141d5565b8160008151811061134c5761134c613ba4565b60209081029190910101526108c083358233346001611e53565b608081015167ffffffffffffffff161580159061139a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113d1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060850151855184518587015173ffffffffffffffffffffffffffffffffffffffff84166000908152600390985294872080549697949694956114c6957fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e7595949392886114498361450c565b909155506080808c015160408051602081019990995273ffffffffffffffffffffffffffffffffffffffff9097169688019690965260608701949094529285019190915260a084015260c083015267ffffffffffffffff1660e0820152610100015b60405160208183030381529060405280519060200120612982565b905061153c84606001518284602001518560400151866000015160405160200161152893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526129ca565b611572576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815260048101869052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a2ea7c6e90602401600060405180830381865afa158015611608573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261164e9190810190614544565b8051909150611689576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156116a6576116a6613c11565b60405190808252806020026020018201604052801561174557816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116c45790505b50905060008267ffffffffffffffff81111561176357611763613c11565b60405190808252806020026020018201604052801561178c578160200160208202803683370190505b50905060005b83811015611bab5760008a82815181106117ae576117ae613ba4565b6020908102919091018101518051600090815260049092526040909120805491925090611807576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c816001015414611844576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c811691161461189a576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff166118f0576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff161561194a576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff1615156101008201526006820180548391610120840191611a5690613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8290613fac565b8015611acf5780601f10611aa457610100808354040283529160200191611acf565b820191906000526020600020905b815481529060010190602001808311611ab257829003601f168201915b505050505081525050858481518110611aea57611aea613ba4565b60200260200101819052508160200151848481518110611b0c57611b0c613ba4565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff16868581518110611b4257611b42613ba4565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f6158560000151604051611b9991815260200190565b60405180910390a45050600101611792565b50611bbb84838360018b8b612a46565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660209081526040808320858452918290529091205467ffffffffffffffff1615611c3d576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b608081015167ffffffffffffffff1615801590611cfc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611d33576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401516060808601518651855186880151868801519488015160808901518051908b012060a08a015173ffffffffffffffffffffffffffffffffffffffff871660009081526003909c52988b2080549a9b989a98996114c6997ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076999493928c611dc48361450c565b919050558e608001516040516020016114ab9b9a999897969594939291909a8b5273ffffffffffffffffffffffffffffffffffffffff998a1660208c015260408b019890985295909716606089015267ffffffffffffffff938416608089015291151560a088015260c087015260e0860152610100850193909352610120840152166101408201526101600190565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e9857611e98613c11565b604051908082528060200260200182016040528015611ec1578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a2ea7c6e90602401600060405180830381865afa158015611f55573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f9b9190810190614544565b8051909150611fd6576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611ff157611ff1613c11565b60405190808252806020026020018201604052801561209057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161200f5790505b50905060008467ffffffffffffffff8111156120ae576120ae613c11565b6040519080825280602002602001820160405280156120d7578160200160208202803683370190505b50905060005b858110156125655760008b82815181106120f9576120f9613ba4565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff161415801561214457504267ffffffffffffffff16816020015167ffffffffffffffff1611155b1561217b576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015115801561218e575080604001515b156121c5576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121e94290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b61228b8382612e35565b600081815260046020526040902054909250156122aa57600101612281565b81835260008281526004602081815260409283902086518155908601516001820155918501516002830180546060880151608089015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0850151600383015560c0850151908201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906124299082614669565b505050606084015115612480576060840151600090815260046020526040902054612480576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061249357612493613ba4565b60200260200101819052508360a001518686815181106124b5576124b5613ba4565b60200260200101818152505081896020015186815181106124d8576124d8613ba4565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b358560405161254891815260200190565b60405180910390a45050505061255e8160010190565b90506120dd565b5061257583838360008c8c612a46565b845250919998505050505050505050565b606060008267ffffffffffffffff8111156125a3576125a3613c11565b6040519080825280602002602001820160405280156125cc578160200160208202803683370190505b508451909150600090815b818110156126655760008782815181106125f3576125f3613ba4565b6020026020010151905060008151905060005b818110156126515782818151811061262057612620613ba4565b602002602001015187878151811061263a5761263a613ba4565b602090810291909101015260019586019501612606565b50505061265e8160010190565b90506125d7565b509195945050505050565b60008281526005602052604090205467ffffffffffffffff16156126c0576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b6060600061273f83612e94565b600101905060008167ffffffffffffffff81111561275f5761275f613c11565b6040519080825280601f01601f191660200182016040528015612789576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461279357509392505050565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006000612f76565b60606112a37f00000000000000000000000000000000000000000000000000000000000000006001612f76565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156128b057507f000000000000000000000000000000000000000000000000000000000000000046145b156128da57507f000000000000000000000000000000000000000000000000000000000000000090565b6112a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600061074b61298f61284a565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006129d98585613021565b50909250905060008160038111156129f3576129f3614782565b148015612a2b57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a3c5750612a3c86868661306e565b9695505050505050565b84516000906001819003612a9e57612a968888600081518110612a6b57612a6b613ba4565b602002602001015188600081518110612a8657612a86613ba4565b60200260200101518888886131bb565b915050612a3c565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612b3f5760005b82811015612b2457878181518110612adb57612adb613ba4565b6020026020010151600014612b1c576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612ac1565b508315612b3457612b34856134da565b600092505050612a3c565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb191906147b1565b905060005b84811015612c6e5760008a8281518110612bd257612bd2613ba4565b6020026020010151905080600003612bea5750612c66565b82612c21576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612c5b576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612bb6565b508715612d49576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612ccb908e908e906004016147ce565b60206040518083038185885af1158015612ce9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0e91906147b1565b612d44576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e18565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d9f908e908e906004016147ce565b60206040518083038185885af1158015612dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de291906147b1565b612e18576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612e2757612e27876134da565b509998505050505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e7699989796918c9101614864565b60405160208183030381529060405280519060200120905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612edd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612f09576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612f2757662386f26fc10000830492506010015b6305f5e1008310612f3f576305f5e100830492506008015b6127108310612f5357612710830492506004015b60648310612f65576064830492506002015b600a831061074b5760010192915050565b606060ff8314612f9057612f89836134ed565b905061074b565b818054612f9c90613fac565b80601f0160208091040260200160405190810160405280929190818152602001828054612fc890613fac565b80156130155780601f10612fea57610100808354040283529160200191613015565b820191906000526020600020905b815481529060010190602001808311612ff857829003601f168201915b5050505050905061074b565b6000806000835160410361305b5760208401516040850151606086015160001a61304d8882858561352c565b955095509550505050613067565b50508151600091506002905b9250925092565b60008060008573ffffffffffffffffffffffffffffffffffffffff16858560405160240161309d929190614981565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161311e919061499a565b600060405180830381855afa9150503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b509150915081801561317257506020815110155b8015612a3c575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906131b090830160209081019084016149ac565b149695505050505050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff811661322f578515613216576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b821561322557613225846134da565b6000915050612a3c565b851561331a578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a491906147b1565b6132da576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613314576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156133f2576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613374908b90600401613b16565b60206040518083038185885af1158015613392573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b791906147b1565b6133ed576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bf565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613446908b90600401613b16565b60206040518083038185885af1158015613464573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348991906147b1565b6134bf576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156134ce576134ce846134da565b50939695505050505050565b80156134ea576134ea3382613626565b50565b606060006134fa83613700565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613567575060009150600390508261361c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135bb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166136125750600092506001915082905061361c565b9250600091508190505b9450945094915050565b80471015613666576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146136c0576040519150601f19603f3d011682016040523d82523d6000602084013e6136c5565b606091505b5050905080610ae6576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216601f81111561074b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261375357600080fd5b50813567ffffffffffffffff81111561376b57600080fd5b6020830191508360208260051b850101111561378657600080fd5b9250929050565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c385828601613741565b90969095509350505050565b60005b838110156137ea5781810151838201526020016137d2565b50506000910152565b6000815180845261380b8160208601602086016137cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061385060208301846137f3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134ea57600080fd5b803561388481613857565b919050565b60006020828403121561389b57600080fd5b813561385081613857565b6000602082840312156138b857600080fd5b813567ffffffffffffffff8111156138cf57600080fd5b820160e0818503121561385057600080fd5b602080825282518282018190526000918401906040840190835b818110156139195783518352602093840193909201916001016138fb565b509095945050505050565b6000606082840312801561393757600080fd5b509092915050565b60006020828403121561395157600080fd5b5035919050565b600081518084526020840193506020830160005b8281101561398a57815186526020958601959091019060010161396c565b5093949350505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006139cf60e08301896137f3565b82810360408401526139e181896137f3565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c0840152611bbb8185613958565b805182526020810151602083015260006040820151613a48604085018267ffffffffffffffff169052565b506060820151613a64606085018267ffffffffffffffff169052565b506080820151613a80608085018267ffffffffffffffff169052565b5060a082015160a084015260c0820151613ab260c085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e0820151613ada60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b50610100820151613af061010085018215159052565b50610120820151610140610120850152613b0e6101408501826137f3565b949350505050565b6020815260006138506020830184613a1d565b600061010082840312801561393757600080fd5b60008060408385031215613b5057600080fd5b8235613b5b81613857565b946020939093013593505050565b600060208284031215613b7b57600080fd5b813567ffffffffffffffff811115613b9257600080fd5b82016040818503121561385057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613c0757600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613c6357613c63613c11565b60405290565b60405160c0810167ffffffffffffffff81118282101715613c6357613c63613c11565b6040516080810167ffffffffffffffff81118282101715613c6357613c63613c11565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cf657613cf6613c11565b604052919050565b600067ffffffffffffffff821115613d1857613d18613c11565b5060051b60200190565b600060408284031215613d3457600080fd5b6040805190810167ffffffffffffffff81118282101715613d5757613d57613c11565b604052823581526020928301359281019290925250919050565b600060608284031215613d8357600080fd5b6040516060810167ffffffffffffffff81118282101715613da657613da6613c11565b604052905080823560ff81168114613dbd57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112613deb57600080fd5b8135613dfe613df982613cfe565b613caf565b80828252602082019150602060608402860101925085831115613e2057600080fd5b602085015b83811015613e4757613e378782613d71565b8352602090920191606001613e25565b5095945050505050565b803567ffffffffffffffff8116811461388457600080fd5b600060a08236031215613e7b57600080fd5b613e83613c40565b82358152602083013567ffffffffffffffff811115613ea157600080fd5b830136601f820112613eb257600080fd5b8035613ec0613df982613cfe565b8082825260208201915060208360061b850101925036831115613ee257600080fd5b6020840193505b82841015613f0e57613efb3685613d22565b8252602082019150604084019350613ee9565b6020850152505050604083013567ffffffffffffffff811115613f3057600080fd5b613f3c36828601613dda565b604083015250613f4e60608401613879565b6060820152613f5f60808401613e51565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561074b5761074b613f6a565b600181811c90821680613fc057607f821691505b602082108103613ff9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80151581146134ea57600080fd5b600067ffffffffffffffff82111561402757614027613c11565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c0828403121561406557600080fd5b61406d613c69565b9050813561407a81613857565b815261408860208301613e51565b6020820152604082013561409b81613fff565b604082015260608281013590820152608082013567ffffffffffffffff8111156140c457600080fd5b8201601f810184136140d557600080fd5b80356140e3613df98261400d565b8181528560208385010111156140f857600080fd5b8160208401602083013760009181016020019190915260808301525060a09182013591810191909152919050565b600060e0823603121561413857600080fd5b614140613c40565b82358152602083013567ffffffffffffffff81111561415e57600080fd5b61416a36828601614053565b60208301525061417d3660408501613d71565b604082015260a083013561419081613857565b6060820152613f5f60c08401613e51565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112613c0757600080fd5b600061074b3683614053565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c0757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261424a57600080fd5b83018035915067ffffffffffffffff82111561426557600080fd5b6020019150600581901b360382131561378657600080fd5b600061428b613df984613cfe565b8381526020810190600585901b8401368111156142a757600080fd5b845b8181101561391957803567ffffffffffffffff8111156142c857600080fd5b6142d436828901614053565b855250602093840193016142a9565b6000604082840312156142f557600080fd5b6138508383613d22565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261433457600080fd5b83018035915067ffffffffffffffff82111561434f57600080fd5b6020019150600681901b360382131561378657600080fd5b600084516143798184602089016137cf565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516143b38160018401602089016137cf565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516143f18160028401602088016137cf565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b602001915060608102360382131561378657600080fd5b60006060828403121561447757600080fd5b6138508383613d71565b60006020828403121561449357600080fd5b61385082613e51565b60006101008284031280156144b057600080fd5b506144b9613c40565b823581526144ca8460208501613d22565b60208201526144dc8460608501613d71565b604082015260c08301356144ef81613857565b606082015261450060e08401613e51565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453d5761453d613f6a565b5060010190565b60006020828403121561455657600080fd5b815167ffffffffffffffff81111561456d57600080fd5b82016080818503121561457f57600080fd5b614587613c8c565b81518152602082015161459981613857565b602082015260408201516145ac81613fff565b6040820152606082015167ffffffffffffffff8111156145cb57600080fd5b80830192505084601f8301126145e057600080fd5b81516145ee613df98261400d565b81815286602083860101111561460357600080fd5b6146148260208301602087016137cf565b606083015250949350505050565b601f821115610ae657806000526020600020601f840160051c810160208510156146495750805b601f840160051c820191505b818110156107055760008155600101614655565b815167ffffffffffffffff81111561468357614683613c11565b614697816146918454613fac565b84614622565b6020601f8211600181146146e957600083156146b35750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610705565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156147375787850151825560209485019460019092019101614717565b508482101561477357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000602082840312156147c357600080fd5b815161385081613fff565b6000604082016040835280855180835260608501915060608160051b86010192506020870160005b82811015614845577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452614830858351613a1d565b945060209384019391909101906001016147f6565b50505050828103602084015261485b8185613958565b95945050505050565b8981527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b1660208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660348201527fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b1660488201527fffffffffffffffff0000000000000000000000000000000000000000000000008660c01b16605082015284151560f81b60588201528360598201526000607982016000855161493c818460208a016137cf565b8201905061496e818660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b6004019c9b505050505050505050505050565b828152604060208201526000613b0e60408301846137f3565b60008251613c078184602087016137cf565b6000602082840312156149be57600080fd5b505191905056fea164736f6c634300081b000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/telos/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  Indexer,\n  IndexerInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/telos/types/factories/@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60e0604052348015600f57600080fd5b506001608052600360a052600060c05260805160a05160c051610ab561004b600039600060fe0152600060d50152600060ac0152610ab56000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610064578063a2ea7c6e14610085575b600080fd5b61004e6100a5565b60405161005b9190610683565b60405180910390f35b6100776100723660046106b2565b610148565b60405190815260200161005b565b610098610093366004610760565b61030c565b60405161005b9190610779565b60606100d07f0000000000000000000000000000000000000000000000000000000000000000610434565b6100f97f0000000000000000000000000000000000000000000000000000000000000000610434565b6101227f0000000000000000000000000000000000000000000000000000000000000000610434565b604051602001610134939291906107d2565b604051602081830303815290604052905090565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506101ca9050826104f2565b60008181526020819052604090205490915015610213576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102af908261093a565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e846040516102fa9190610779565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff161515928201929092526002820180549192916060840191906103ab90610898565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790610898565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050815250509050919050565b6060600061044183610532565b600101905060008167ffffffffffffffff81111561046157610461610869565b6040519080825280601f01601f19166020018201604052801561048b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461049557509392505050565b600081606001518260200151836040015160405160200161051593929190610a53565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061057b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105a7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105c557662386f26fc10000830492506010015b6305f5e10083106105dd576305f5e100830492506008015b61271083106105f157612710830492506004015b60648310610603576064830492506002015b600a831061060f576001015b92915050565b60005b83811015610630578181015183820152602001610618565b50506000910152565b60008151808452610651816020860160208601610615565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106966020830184610639565b9392505050565b803580151581146106ad57600080fd5b919050565b600080600080606085870312156106c857600080fd5b843567ffffffffffffffff8111156106df57600080fd5b8501601f810187136106f057600080fd5b803567ffffffffffffffff81111561070757600080fd5b87602082840101111561071957600080fd5b60209182019550935085013573ffffffffffffffffffffffffffffffffffffffff8116811461074757600080fd5b91506107556040860161069d565b905092959194509250565b60006020828403121561077257600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526107ca60a0840182610639565b949350505050565b600084516107e4818460208901610615565b7f2e00000000000000000000000000000000000000000000000000000000000000908301908152845161081e816001840160208901610615565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161085c816002840160208801610615565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806108ac57607f821691505b6020821081036108e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561093557806000526020600020601f840160051c810160208510156109125750805b601f840160051c820191505b81811015610932576000815560010161091e565b50505b505050565b815167ffffffffffffffff81111561095457610954610869565b610968816109628454610898565b846108eb565b6020601f8211600181146109ba57600083156109845750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610932565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015610a0857878501518255602094850194600190920191016109e8565b5084821015610a4457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60008451610a65818460208901610615565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c634300081b000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/telos/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/unichain/.chainId",
    "content": "130\n"
  },
  {
    "path": "deployments/unichain/.migrations.json",
    "content": "{\n  \"000001-registry\": 1682454805,\n  \"000002-eas\": 1682454812,\n  \"000003-register-initial-schemas\": 1739372915,\n  \"000004-name-initial-schemas\": 1739373612,\n  \"000005-eip712-proxy\": 1739374161,\n  \"000006-indexer\": 1739374173\n}"
  },
  {
    "path": "deployments/unichain/EAS.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000021\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schema\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct EIP712Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/unichain/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x65c83e3C5f1505C4220B2f57815285Dc58464088\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ECDSAInvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"s\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"ECDSAInvalidSignatureS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xe3847c1a693021ec1918b117e05f2195f92778e8340845a5e64008a633cbf706\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x2dC226E0D8deE167b8Ff6B15500E4A8BD84b9607\",\n    \"contractAddress\": \"0x65c83e3C5f1505C4220B2f57815285Dc58464088\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2297740\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xbd2ff017325b17d69479f2f44435a18bfcf171dd5d44b561f578c0cb100fd450\",\n    \"transactionHash\": \"0xe3847c1a693021ec1918b117e05f2195f92778e8340845a5e64008a633cbf706\",\n    \"logs\": [],\n    \"blockNumber\": 8625796,\n    \"cumulativeGasUsed\": \"2341678\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\",\n    \"EIP712Proxy\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"AccessDenied\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"DeadlineExpired\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ECDSAInvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ECDSAInvalidSignatureS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidLength\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidShortString\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"NotFound\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"str\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"StringTooLong\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"UsedSignature\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"EIP712DomainChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyAttestationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"attestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"eip712Domain\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes1\\\",\\\"name\\\":\\\"fields\\\",\\\"type\\\":\\\"bytes1\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"version\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"chainId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifyingContract\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"extensions\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAttestTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAttester\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getDomainSeparator\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getName\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getRevokeTypeHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"expirationTime\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"revocable\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"refUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct AttestationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyAttestationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiAttestByDelegation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData[]\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct MultiDelegatedProxyRevocationRequest[]\\\",\\\"name\\\":\\\"multiDelegatedRequests\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"multiRevokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schema\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevocationRequestData\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"v\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"r\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"s\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Signature\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"revoker\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"deadline\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"internalType\\\":\\\"struct DelegatedProxyRevocationRequest\\\",\\\"name\\\":\\\"delegatedRequest\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"revokeByDelegation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"errors\\\":{\\\"ECDSAInvalidSignature()\\\":[{\\\"details\\\":\\\"The signature derives the `address(0)`.\\\"}],\\\"ECDSAInvalidSignatureLength(uint256)\\\":[{\\\"details\\\":\\\"The signature has an invalid length.\\\"}],\\\"ECDSAInvalidSignatureS(bytes32)\\\":[{\\\"details\\\":\\\"The signature has an S value that is in the upper half order.\\\"}]},\\\"events\\\":{\\\"EIP712DomainChanged()\\\":{\\\"details\\\":\\\"MAY be emitted to signal that the domain could have changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated attestation request.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new EIP1271Verifier instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\",\\\"name\\\":\\\"The user readable name of the signing domain.\\\"}},\\\"eip712Domain()\\\":{\\\"details\\\":\\\"See {IERC-5267}.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\\\"}},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"params\\\":{\\\"multiDelegatedRequests\\\":\\\"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\\\"}},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"params\\\":{\\\"delegatedRequest\\\":\\\"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"EIP712Proxy\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Attests to a specific schema via the provided EIP712 signature.\\\"},\\\"getAttestTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the attest function.\\\"},\\\"getAttester(bytes32)\\\":{\\\"notice\\\":\\\"Returns the attester for a given uid.\\\"},\\\"getDomainSeparator()\\\":{\\\"notice\\\":\\\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\"},\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getName()\\\":{\\\"notice\\\":\\\"Returns the EIP712 name.\\\"},\\\"getRevokeTypeHash()\\\":{\\\"notice\\\":\\\"Returns the EIP712 type hash for the revoke function.\\\"},\\\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Attests to multiple schemas using via provided EIP712 signatures.\\\"},\\\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\\\":{\\\"notice\\\":\\\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\"},\\\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\\\":{\\\"notice\\\":\\\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":\\\"EIP712Proxy\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { EIP712 } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\\\\\";\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AccessDenied,\\\\n    DeadlineExpired,\\\\n    Signature,\\\\n    InvalidEAS,\\\\n    InvalidLength,\\\\n    InvalidSignature,\\\\n    NotFound,\\\\n    NO_EXPIRATION_TIME,\\\\n    uncheckedInc\\\\n} from \\\\\\\"../../Common.sol\\\\\\\";\\\\n\\\\n// prettier-ignore\\\\nimport {\\\\n    AttestationRequest,\\\\n    AttestationRequestData,\\\\n    IEAS,\\\\n    MultiAttestationRequest,\\\\n    MultiRevocationRequest,\\\\n    RevocationRequest,\\\\n    RevocationRequestData\\\\n} from \\\\\\\"../../IEAS.sol\\\\\\\";\\\\n\\\\nimport { Semver } from \\\\\\\"../../Semver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedProxyAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The EIP712 signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedProxyRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title EIP712Proxy\\\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\\\n///     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\\\n///     signatures.\\\\ncontract EIP712Proxy is Semver, EIP712 {\\\\n    error UsedSignature();\\\\n\\\\n    // The hash of the data type used to relay calls to the attest function. It's the value of\\\\n    // keccak256(\\\\\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\\\n\\\\n    // The hash of the data type used to relay calls to the revoke function. It's the value of\\\\n    // keccak256(\\\\\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\\\\\").\\\\n    bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\\\n\\\\n    // The global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    // The user readable name of the signing domain.\\\\n    string private _name;\\\\n\\\\n    // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\\\n    // attester is able to revert attestations by proxy.\\\\n    mapping(bytes32 uid => address attester) private _attesters;\\\\n\\\\n    // Replay protection signatures.\\\\n    mapping(bytes signature => bool used) private _signatures;\\\\n\\\\n    /// @dev Creates a new EIP1271Verifier instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    /// @param name The user readable name of the signing domain.\\\\n    constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\\\\\"1.4.0\\\\\\\") {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n        _name = name;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\\\n    function getDomainSeparator() external view returns (bytes32) {\\\\n        return _domainSeparatorV4();\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the attest function.\\\\n    function getAttestTypeHash() external pure returns (bytes32) {\\\\n        return ATTEST_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 type hash for the revoke function.\\\\n    function getRevokeTypeHash() external pure returns (bytes32) {\\\\n        return REVOKE_PROXY_TYPEHASH;\\\\n    }\\\\n\\\\n    /// Returns the EIP712 name.\\\\n    function getName() external view returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /// Returns the attester for a given uid.\\\\n    function getAttester(bytes32 uid) external view returns (address) {\\\\n        return _attesters[uid];\\\\n    }\\\\n\\\\n    /// @notice Attests to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedProxyAttestationRequest calldata delegatedRequest\\\\n    ) public payable virtual returns (bytes32) {\\\\n        _verifyAttest(delegatedRequest);\\\\n\\\\n        bytes32 uid = _eas.attest{ value: msg.value }(\\\\n            AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n        );\\\\n\\\\n        _attesters[uid] = delegatedRequest.attester;\\\\n\\\\n        return uid;\\\\n    }\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual returns (bytes32[] memory) {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _verifyAttest(\\\\n                    DelegatedProxyAttestationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: data[j],\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        attester: multiDelegatedRequest.attester,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\\\n\\\\n        // Store all attesters, according to the order of the attestation requests.\\\\n        uint256 uidCounter = 0;\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\\\n\\\\n            uint256 dataLength = data.length;\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\\\n\\\\n                unchecked {\\\\n                    ++uidCounter;\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        return uids;\\\\n    }\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\\\n        _verifyRevoke(delegatedRequest);\\\\n\\\\n        return\\\\n            _eas.revoke{ value: msg.value }(\\\\n                RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) public payable virtual {\\\\n        uint256 length = multiDelegatedRequests.length;\\\\n        MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\\\n\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\\\n            RevocationRequestData[] memory data = multiDelegatedRequest.data;\\\\n\\\\n            // Ensure that no inputs are missing.\\\\n            uint256 dataLength = data.length;\\\\n            if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\\\n                revert InvalidLength();\\\\n            }\\\\n\\\\n            // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n            for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\\\n                RevocationRequestData memory requestData = data[j];\\\\n\\\\n                _verifyRevoke(\\\\n                    DelegatedProxyRevocationRequest({\\\\n                        schema: multiDelegatedRequest.schema,\\\\n                        data: requestData,\\\\n                        signature: multiDelegatedRequest.signatures[j],\\\\n                        revoker: multiDelegatedRequest.revoker,\\\\n                        deadline: multiDelegatedRequest.deadline\\\\n                    })\\\\n                );\\\\n            }\\\\n\\\\n            multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\\\n        }\\\\n\\\\n        _eas.multiRevoke{ value: msg.value }(multiRequests);\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated attestation request.\\\\n    /// @param request The arguments of the delegated attestation request.\\\\n    function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        AttestationRequestData memory data = request.data;\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    ATTEST_PROXY_TYPEHASH,\\\\n                    request.attester,\\\\n                    request.schema,\\\\n                    data.recipient,\\\\n                    data.expirationTime,\\\\n                    data.revocable,\\\\n                    data.refUID,\\\\n                    keccak256(data.data),\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Verifies delegated revocation request.\\\\n    /// @param request The arguments of the delegated revocation request.\\\\n    function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\\\n        if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\\\n            revert DeadlineExpired();\\\\n        }\\\\n\\\\n        RevocationRequestData memory data = request.data;\\\\n\\\\n        // Allow only original attesters to revoke their attestations.\\\\n        address attester = _attesters[data.uid];\\\\n        if (attester == address(0)) {\\\\n            revert NotFound();\\\\n        }\\\\n\\\\n        if (attester != request.revoker) {\\\\n            revert AccessDenied();\\\\n        }\\\\n\\\\n        Signature memory signature = request.signature;\\\\n\\\\n        _verifyUnusedSignature(signature);\\\\n\\\\n        bytes32 digest = _hashTypedDataV4(\\\\n            keccak256(\\\\n                abi.encode(\\\\n                    REVOKE_PROXY_TYPEHASH,\\\\n                    request.revoker,\\\\n                    request.schema,\\\\n                    data.uid,\\\\n                    data.value,\\\\n                    request.deadline\\\\n                )\\\\n            )\\\\n        );\\\\n\\\\n        if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\\\n            revert InvalidSignature();\\\\n        }\\\\n    }\\\\n\\\\n    /// @dev Ensures that the provided EIP712 signature wasn't already used.\\\\n    /// @param signature The EIP712 signature data.\\\\n    function _verifyUnusedSignature(Signature memory signature) internal {\\\\n        bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\\\n\\\\n        if (_signatures[packedSignature]) {\\\\n            revert UsedSignature();\\\\n        }\\\\n\\\\n        _signatures[packedSignature] = true;\\\\n    }\\\\n\\\\n    /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\\\n    ///     current block time.\\\\n    function _time() internal view virtual returns (uint64) {\\\\n        return uint64(block.timestamp);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC5267.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\ninterface IERC5267 {\\\\n    /**\\\\n     * @dev MAY be emitted to signal that the domain could have changed.\\\\n     */\\\\n    event EIP712DomainChanged();\\\\n\\\\n    /**\\\\n     * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\\\n     * signature.\\\\n     */\\\\n    function eip712Domain()\\\\n        external\\\\n        view\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        );\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/ShortStrings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {StorageSlot} from \\\\\\\"./StorageSlot.sol\\\\\\\";\\\\n\\\\n// | string  | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   |\\\\n// | length  | 0x                                                              BB |\\\\ntype ShortString is bytes32;\\\\n\\\\n/**\\\\n * @dev This library provides functions to convert short memory strings\\\\n * into a `ShortString` type that can be used as an immutable variable.\\\\n *\\\\n * Strings of arbitrary length can be optimized using this library if\\\\n * they are short enough (up to 31 bytes) by packing them with their\\\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\\\n * fallback mechanism can be used for every other case.\\\\n *\\\\n * Usage example:\\\\n *\\\\n * ```solidity\\\\n * contract Named {\\\\n *     using ShortStrings for *;\\\\n *\\\\n *     ShortString private immutable _name;\\\\n *     string private _nameFallback;\\\\n *\\\\n *     constructor(string memory contractName) {\\\\n *         _name = contractName.toShortStringWithFallback(_nameFallback);\\\\n *     }\\\\n *\\\\n *     function name() external view returns (string memory) {\\\\n *         return _name.toStringWithFallback(_nameFallback);\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary ShortStrings {\\\\n    // Used as an identifier for strings longer than 31 bytes.\\\\n    bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\\\n\\\\n    error StringTooLong(string str);\\\\n    error InvalidShortString();\\\\n\\\\n    /**\\\\n     * @dev Encode a string of at most 31 chars into a `ShortString`.\\\\n     *\\\\n     * This will trigger a `StringTooLong` error is the input string is too long.\\\\n     */\\\\n    function toShortString(string memory str) internal pure returns (ShortString) {\\\\n        bytes memory bstr = bytes(str);\\\\n        if (bstr.length > 31) {\\\\n            revert StringTooLong(str);\\\\n        }\\\\n        return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a `ShortString` back to a \\\\\\\"normal\\\\\\\" string.\\\\n     */\\\\n    function toString(ShortString sstr) internal pure returns (string memory) {\\\\n        uint256 len = byteLength(sstr);\\\\n        // using `new string(len)` would work locally but is not memory safe.\\\\n        string memory str = new string(32);\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(str, len)\\\\n            mstore(add(str, 0x20), sstr)\\\\n        }\\\\n        return str;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a `ShortString`.\\\\n     */\\\\n    function byteLength(ShortString sstr) internal pure returns (uint256) {\\\\n        uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\\\n        if (result > 31) {\\\\n            revert InvalidShortString();\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\\\n     */\\\\n    function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\\\n        if (bytes(value).length < 32) {\\\\n            return toShortString(value);\\\\n        } else {\\\\n            StorageSlot.getStringSlot(store).value = value;\\\\n            return ShortString.wrap(FALLBACK_SENTINEL);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\\\n     */\\\\n    function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return toString(value);\\\\n        } else {\\\\n            return store;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\\\n     * {setWithFallback}.\\\\n     *\\\\n     * WARNING: This will return the \\\\\\\"byte length\\\\\\\" of the string. This may not reflect the actual length in terms of\\\\n     * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\\\n     */\\\\n    function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\\\n        if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\\\n            return byteLength(value);\\\\n        } else {\\\\n            return bytes(store).length;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/StorageSlot.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Library for reading and writing primitive types to specific storage slots.\\\\n *\\\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\\\n *\\\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\\\n *\\\\n * Example usage to set ERC1967 implementation slot:\\\\n * ```solidity\\\\n * contract ERC1967 {\\\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\\\n *\\\\n *     function _getImplementation() internal view returns (address) {\\\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\\\n *     }\\\\n *\\\\n *     function _setImplementation(address newImplementation) internal {\\\\n *         require(newImplementation.code.length > 0);\\\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\\\n *     }\\\\n * }\\\\n * ```\\\\n */\\\\nlibrary StorageSlot {\\\\n    struct AddressSlot {\\\\n        address value;\\\\n    }\\\\n\\\\n    struct BooleanSlot {\\\\n        bool value;\\\\n    }\\\\n\\\\n    struct Bytes32Slot {\\\\n        bytes32 value;\\\\n    }\\\\n\\\\n    struct Uint256Slot {\\\\n        uint256 value;\\\\n    }\\\\n\\\\n    struct StringSlot {\\\\n        string value;\\\\n    }\\\\n\\\\n    struct BytesSlot {\\\\n        bytes value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\\\n     */\\\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\\\n     */\\\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\\\n     */\\\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := slot\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\\\n     */\\\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            r.slot := store.slot\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The signature derives the `address(0)`.\\\\n     */\\\\n    error ECDSAInvalidSignature();\\\\n\\\\n    /**\\\\n     * @dev The signature has an invalid length.\\\\n     */\\\\n    error ECDSAInvalidSignatureLength(uint256 length);\\\\n\\\\n    /**\\\\n     * @dev The signature has an S value that is in the upper half order.\\\\n     */\\\\n    error ECDSAInvalidSignatureS(bytes32 s);\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\\\n     * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\\\n     * and a bytes32 providing additional information about the error.\\\\n     *\\\\n     * If no error is returned, then the address can be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\\\n        unchecked {\\\\n            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n            // We do not check for an overflow here since the shift operation results in 0 or 1.\\\\n            uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n            return tryRecover(hash, v, r, s);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function tryRecover(\\\\n        bytes32 hash,\\\\n        uint8 v,\\\\n        bytes32 r,\\\\n        bytes32 s\\\\n    ) internal pure returns (address, RecoverError, bytes32) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS, s);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature, bytes32(0));\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError, bytes32(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\\\n        _throwError(error, errorArg);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\\\n     */\\\\n    function _throwError(RecoverError error, bytes32 errorArg) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert ECDSAInvalidSignature();\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert ECDSAInvalidSignatureLength(uint256(errorArg));\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert ECDSAInvalidSignatureS(errorArg);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {MessageHashUtils} from \\\\\\\"./MessageHashUtils.sol\\\\\\\";\\\\nimport {ShortStrings, ShortString} from \\\\\\\"../ShortStrings.sol\\\\\\\";\\\\nimport {IERC5267} from \\\\\\\"../../interfaces/IERC5267.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\\\n *\\\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\\\n *\\\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\\\n * ({_hashTypedDataV4}).\\\\n *\\\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\\\n *\\\\n * NOTE: This contract implements the version of the encoding known as \\\\\\\"v4\\\\\\\", as implemented by the JSON RPC method\\\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\\\n *\\\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\\\n *\\\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\\\n */\\\\nabstract contract EIP712 is IERC5267 {\\\\n    using ShortStrings for *;\\\\n\\\\n    bytes32 private constant TYPE_HASH =\\\\n        keccak256(\\\\\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\\\\\");\\\\n\\\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\\\n    // invalidate the cached domain separator if the chain id changes.\\\\n    bytes32 private immutable _cachedDomainSeparator;\\\\n    uint256 private immutable _cachedChainId;\\\\n    address private immutable _cachedThis;\\\\n\\\\n    bytes32 private immutable _hashedName;\\\\n    bytes32 private immutable _hashedVersion;\\\\n\\\\n    ShortString private immutable _name;\\\\n    ShortString private immutable _version;\\\\n    string private _nameFallback;\\\\n    string private _versionFallback;\\\\n\\\\n    /**\\\\n     * @dev Initializes the domain separator and parameter caches.\\\\n     *\\\\n     * The meaning of `name` and `version` is specified in\\\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\\\n     *\\\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\\\n     * - `version`: the current major version of the signing domain.\\\\n     *\\\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\\\n     * contract upgrade].\\\\n     */\\\\n    constructor(string memory name, string memory version) {\\\\n        _name = name.toShortStringWithFallback(_nameFallback);\\\\n        _version = version.toShortStringWithFallback(_versionFallback);\\\\n        _hashedName = keccak256(bytes(name));\\\\n        _hashedVersion = keccak256(bytes(version));\\\\n\\\\n        _cachedChainId = block.chainid;\\\\n        _cachedDomainSeparator = _buildDomainSeparator();\\\\n        _cachedThis = address(this);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the domain separator for the current chain.\\\\n     */\\\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\\\n        if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\\\n            return _cachedDomainSeparator;\\\\n        } else {\\\\n            return _buildDomainSeparator();\\\\n        }\\\\n    }\\\\n\\\\n    function _buildDomainSeparator() private view returns (bytes32) {\\\\n        return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\\\n     *\\\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\\\n     *\\\\n     * ```solidity\\\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\\\n     *     keccak256(\\\\\\\"Mail(address to,string contents)\\\\\\\"),\\\\n     *     mailTo,\\\\n     *     keccak256(bytes(mailContents))\\\\n     * )));\\\\n     * address signer = ECDSA.recover(digest, signature);\\\\n     * ```\\\\n     */\\\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\\\n        return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC-5267}.\\\\n     */\\\\n    function eip712Domain()\\\\n        public\\\\n        view\\\\n        virtual\\\\n        returns (\\\\n            bytes1 fields,\\\\n            string memory name,\\\\n            string memory version,\\\\n            uint256 chainId,\\\\n            address verifyingContract,\\\\n            bytes32 salt,\\\\n            uint256[] memory extensions\\\\n        )\\\\n    {\\\\n        return (\\\\n            hex\\\\\\\"0f\\\\\\\", // 01111\\\\n            _EIP712Name(),\\\\n            _EIP712Version(),\\\\n            block.chainid,\\\\n            address(this),\\\\n            bytes32(0),\\\\n            new uint256[](0)\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The name parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _name which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Name() internal view returns (string memory) {\\\\n        return _name.toStringWithFallback(_nameFallback);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The version parameter for the EIP712 domain.\\\\n     *\\\\n     * NOTE: By default this function reads _version which is an immutable value.\\\\n     * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\\\n     */\\\\n    // solhint-disable-next-line func-name-mixedcase\\\\n    function _EIP712Version() internal view returns (string memory) {\\\\n        return _version.toStringWithFallback(_versionFallback);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Strings} from \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\\\n *\\\\n * The library provides methods for generating a hash of a message that conforms to the\\\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\\\n * specifications.\\\\n */\\\\nlibrary MessageHashUtils {\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing a bytes32 `messageHash` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\"` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\\\n     * keccak256, although any bytes32 value can be safely used because the final digest will\\\\n     * be re-hashed.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\") // 32 is the bytes-length of messageHash\\\\n            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\\\n            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x45` (`personal_sign` messages).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `message` with\\\\n     * `\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\" + len(message)` and hashing the result. It corresponds with the\\\\n     * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\\\n        return\\\\n            keccak256(bytes.concat(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", bytes(Strings.toString(message.length)), message));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\\\n     * `0x00` (data with intended validator).\\\\n     *\\\\n     * The digest is calculated by prefixing an arbitrary `data` with `\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\"` and the intended\\\\n     * `validator` address. Then hashing the result.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(hex\\\\\\\"19_00\\\\\\\", validator, data));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\\\n     *\\\\n     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\\\n     * `\\\\\\\\x19\\\\\\\\x01` and hashing the result. It corresponds to the hash signed by the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {ECDSA-recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, hex\\\\\\\"19_01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            digest := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"errors\": {\n      \"ECDSAInvalidSignature()\": [\n        {\n          \"details\": \"The signature derives the `address(0)`.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureLength(uint256)\": [\n        {\n          \"details\": \"The signature has an invalid length.\"\n        }\n      ],\n      \"ECDSAInvalidSignatureS(bytes32)\": [\n        {\n          \"details\": \"The signature has an S value that is in the upper half order.\"\n        }\n      ]\n    },\n    \"events\": {\n      \"EIP712DomainChanged()\": {\n        \"details\": \"MAY be emitted to signal that the domain could have changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated attestation request.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UID of the new attestation. Example:     attestByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         signature: {             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',         deadline: 1673891048     })\"\n        }\n      },\n      \"constructor\": {\n        \"details\": \"Creates a new EIP1271Verifier instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\",\n          \"name\": \"The user readable name of the signing domain.\"\n        }\n      },\n      \"eip712Domain()\": {\n        \"details\": \"See {IERC-5267}.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi attestation requests. The requests should be     grouped by distinct schema ids to benefit from the best batching optimization.\"\n        },\n        \"returns\": {\n          \"_0\": \"The UIDs of the new attestations. Example:     multiAttestByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',             expirationTime: 1673891048,             revocable: true,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x1234',             value: 0         },         {             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',             expirationTime: 0,             revocable: false,             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',             data: '0x00',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',         deadline: 1673891048     }])\"\n        }\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"params\": {\n          \"multiDelegatedRequests\": \"The arguments of the delegated multi revocation attestation requests. The requests     should be grouped by distinct schema ids to benefit from the best batching optimization. Example:     multiRevokeByDelegation([{         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: [{             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',             value: 1000         },         {             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',             value: 0         }],         signatures: [{             v: 28,             r: '0x148c...b25b',             s: '0x5a72...be22'         },         {             v: 28,             r: '0x487s...67bb',             s: '0x12ad...2366'         }],         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     }])\"\n        }\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"params\": {\n          \"delegatedRequest\": \"The arguments of the delegated revocation request. Example:     revokeByDelegation({         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',         data: {             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',             value: 0         },         signature: {             v: 27,             r: '0xb593...7142',             s: '0x0f5b...2cce'         },         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',         deadline: 1673891048     })\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"EIP712Proxy\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Attests to a specific schema via the provided EIP712 signature.\"\n      },\n      \"getAttestTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the attest function.\"\n      },\n      \"getAttester(bytes32)\": {\n        \"notice\": \"Returns the attester for a given uid.\"\n      },\n      \"getDomainSeparator()\": {\n        \"notice\": \"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"\n      },\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getName()\": {\n        \"notice\": \"Returns the EIP712 name.\"\n      },\n      \"getRevokeTypeHash()\": {\n        \"notice\": \"Returns the EIP712 type hash for the revoke function.\"\n      },\n      \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Attests to multiple schemas using via provided EIP712 signatures.\"\n      },\n      \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\": {\n        \"notice\": \"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"\n      },\n      \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\": {\n        \"notice\": \"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"This utility contract an be used to aggregate delegated attestations without requiring a specific order via     nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***     signatures.\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 5640,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_nameFallback\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5642,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_versionFallback\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3573,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_attesters\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_address)\"\n      },\n      {\n        \"astId\": 3581,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy\",\n        \"label\": \"_signatures\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes_memory_ptr,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_address)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => address)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_address\"\n      },\n      \"t_mapping(t_bytes_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes_memory_ptr\",\n        \"label\": \"mapping(bytes => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/unichain/Indexer.json",
    "content": "{\n  \"address\": \"0xE6afd49f7beF444e39BFDFbB6BE63119a8BdE88F\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x69ceb13dd390f806c52992cda47f090cf7ce3929f2cd8b9fdb2341fe3864b59d\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x2dC226E0D8deE167b8Ff6B15500E4A8BD84b9607\",\n    \"contractAddress\": \"0xE6afd49f7beF444e39BFDFbB6BE63119a8BdE88F\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"989532\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x82ad23ef6b1eb32885ee14dcdc7027d849bda9ba33220b118082a0a5328fb92e\",\n    \"transactionHash\": \"0x69ceb13dd390f806c52992cda47f090cf7ce3929f2cd8b9fdb2341fe3864b59d\",\n    \"logs\": [],\n    \"blockNumber\": 8625807,\n    \"cumulativeGasUsed\": \"1033470\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4200000000000000000000000000000000000021\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"ab2e55c92b39ec3be86af0608f634927\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.27+commit.40a35a09\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"eas\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidAttestation\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidEAS\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"InvalidOffset\\\",\\\"type\\\":\\\"error\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"uid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"Indexed\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEAS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IEAS\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReceivedAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSchemaAttesterRecipientAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getSentAttestationUIDCount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"attester\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"schemaUID\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"start\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"length\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reverseOrder\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getSentAttestationUIDs\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"indexAttestation\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"attestationUIDs\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"indexAttestations\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"attestationUID\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAttestationIndexed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"version\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"params\\\":{\\\"uid\\\":\\\"The UID the attestation.\\\"}}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Creates a new Indexer instance.\\\",\\\"params\\\":{\\\"eas\\\":\\\"The address of the global EAS contract.\\\"}},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"params\\\":{\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"recipient\\\":\\\"The recipient of the attestation.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The total number of attestations.\\\"}},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"params\\\":{\\\"attester\\\":\\\"The attester of the attestation.\\\",\\\"length\\\":\\\"The number of total members to retrieve.\\\",\\\"reverseOrder\\\":\\\"Whether the offset starts from the end and the data is returned in reverse.\\\",\\\"schemaUID\\\":\\\"The UID of the schema.\\\",\\\"start\\\":\\\"The offset to start from.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"An array of attestation UIDs.\\\"}},\\\"indexAttestation(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to index.\\\"}},\\\"indexAttestations(bytes32[])\\\":{\\\"params\\\":{\\\"attestationUIDs\\\":\\\"The UIDs of the attestations to index.\\\"}},\\\"isAttestationIndexed(bytes32)\\\":{\\\"params\\\":{\\\"attestationUID\\\":\\\"The UID of the attestation to check.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Whether an attestation has been already indexed.\\\"}},\\\"version()\\\":{\\\"returns\\\":{\\\"_0\\\":\\\"Semver contract version as a string.\\\"}}},\\\"title\\\":\\\"Indexer\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"Indexed(bytes32)\\\":{\\\"notice\\\":\\\"Emitted when an attestation has been indexed.\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getEAS()\\\":{\\\"notice\\\":\\\"Returns the EAS.\\\"},\\\"getReceivedAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\\\"},\\\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\\\"},\\\"getSchemaAttestationUIDCount(bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema.\\\"},\\\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\\\":{\\\"notice\\\":\\\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\\\"},\\\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\\\"},\\\"getSentAttestationUIDCount(address,bytes32)\\\":{\\\"notice\\\":\\\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\\\":{\\\"notice\\\":\\\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\"},\\\"indexAttestation(bytes32)\\\":{\\\"notice\\\":\\\"Indexes an existing attestation.\\\"},\\\"indexAttestations(bytes32[])\\\":{\\\"notice\\\":\\\"Indexes multiple existing attestations.\\\"},\\\"isAttestationIndexed(bytes32)\\\":{\\\"notice\\\":\\\"Returns whether an existing attestation has been already indexed.\\\"},\\\"version()\\\":{\\\"notice\\\":\\\"Returns the full semver contract version.\\\"}},\\\"notice\\\":\\\"Indexing Service for the Ethereum Attestation Service\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":\\\"Indexer\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"none\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":1000000},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n// A representation of an empty/uninitialized UID.\\\\nbytes32 constant EMPTY_UID = 0;\\\\n\\\\n// A zero expiration represents an non-expiring attestation.\\\\nuint64 constant NO_EXPIRATION_TIME = 0;\\\\n\\\\nerror AccessDenied();\\\\nerror DeadlineExpired();\\\\nerror InvalidEAS();\\\\nerror InvalidLength();\\\\nerror InvalidSignature();\\\\nerror NotFound();\\\\n\\\\n/// @notice A struct representing ECDSA signature data.\\\\nstruct Signature {\\\\n    uint8 v; // The recovery ID.\\\\n    bytes32 r; // The x-coordinate of the nonce R.\\\\n    bytes32 s; // The signature data.\\\\n}\\\\n\\\\n/// @notice A struct representing a single attestation.\\\\nstruct Attestation {\\\\n    bytes32 uid; // A unique identifier of the attestation.\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    uint64 time; // The time when the attestation was created (Unix timestamp).\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    address recipient; // The recipient of the attestation.\\\\n    address attester; // The attester/sender of the attestation.\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes data; // Custom attestation data.\\\\n}\\\\n\\\\n/// @notice A helper function to work with unchecked iterators in loops.\\\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\\\n    unchecked {\\\\n        j = i + 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISchemaRegistry } from \\\\\\\"./ISchemaRegistry.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\nimport { Attestation, Signature } from \\\\\\\"./Common.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing the arguments of the attestation request.\\\\nstruct AttestationRequestData {\\\\n    address recipient; // The recipient of the attestation.\\\\n    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\\\n    bool revocable; // Whether the attestation is revocable.\\\\n    bytes32 refUID; // The UID of the related attestation.\\\\n    bytes data; // Custom attestation data.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the attestation request.\\\\nstruct AttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\\\nstruct DelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData data; // The arguments of the attestation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi attestation request.\\\\nstruct MultiAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\\\nstruct MultiDelegatedAttestationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    AttestationRequestData[] data; // The arguments of the attestation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address attester; // The attesting account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the revocation request.\\\\nstruct RevocationRequestData {\\\\n    bytes32 uid; // The UID of the attestation to revoke.\\\\n    uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the revocation request.\\\\nstruct RevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\\\nstruct DelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData data; // The arguments of the revocation request.\\\\n    Signature signature; // The ECDSA signature data.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the multi revocation request.\\\\nstruct MultiRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation request.\\\\n}\\\\n\\\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\\\nstruct MultiDelegatedRevocationRequest {\\\\n    bytes32 schema; // The unique identifier of the schema.\\\\n    RevocationRequestData[] data; // The arguments of the revocation requests.\\\\n    Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\\\n    address revoker; // The revoking account.\\\\n    uint64 deadline; // The deadline of the signature/request.\\\\n}\\\\n\\\\n/// @title IEAS\\\\n/// @notice EAS - Ethereum Attestation Service interface.\\\\ninterface IEAS is ISemver {\\\\n    /// @notice Emitted when an attestation has been made.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param uid The UID of the new attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when an attestation has been revoked.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param attester The attesting account.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param uid The UID the revoked attestation.\\\\n    event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\\\n\\\\n    /// @notice Emitted when a data has been timestamped.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Emitted when a data has been revoked.\\\\n    /// @param revoker The address of the revoker.\\\\n    /// @param data The data.\\\\n    /// @param timestamp The timestamp.\\\\n    event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\\\n\\\\n    /// @notice Returns the address of the global schema registry.\\\\n    /// @return The address of the global schema registry.\\\\n    function getSchemaRegistry() external view returns (ISchemaRegistry);\\\\n\\\\n    /// @notice Attests to a specific schema.\\\\n    /// @param request The arguments of the attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attest({\\\\n    ///         schema: \\\\\\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\\\\\",\\\\n    ///         data: {\\\\n    ///             recipient: \\\\\\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\\\\\",\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: \\\\\\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\\\\\",\\\\n    ///             data: \\\\\\\"0xF00D\\\\\\\",\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function attest(AttestationRequest calldata request) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated attestation request.\\\\n    /// @return The UID of the new attestation.\\\\n    ///\\\\n    /// Example:\\\\n    ///     attestByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function attestByDelegation(\\\\n        DelegatedAttestationRequest calldata delegatedRequest\\\\n    ) external payable returns (bytes32);\\\\n\\\\n    /// @notice Attests to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttest([{\\\\n    ///         schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\\\n    ///             data: '0x12345678',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\\\n    ///     grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    /// @return The UIDs of the new attestations.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiAttestByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\\\n    ///             expirationTime: 1673891048,\\\\n    ///             revocable: true,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x1234',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         {\\\\n    ///             recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\\\n    ///             expirationTime: 0,\\\\n    ///             revocable: false,\\\\n    ///             refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\\\n    ///             data: '0x00',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiAttestByDelegation(\\\\n        MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable returns (bytes32[] memory);\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema.\\\\n    /// @param request The arguments of the revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revoke({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\\\n    ///             value: 0\\\\n    ///         }\\\\n    ///     })\\\\n    function revoke(RevocationRequest calldata request) external payable;\\\\n\\\\n    /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\\\n    /// @param delegatedRequest The arguments of the delegated revocation request.\\\\n    ///\\\\n    /// Example:\\\\n    ///     revokeByDelegation({\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: {\\\\n    ///             uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///         signature: {\\\\n    ///             v: 27,\\\\n    ///             r: '0xb593...7142',\\\\n    ///             s: '0x0f5b...2cce'\\\\n    ///         },\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     })\\\\n    function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas.\\\\n    /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\\\n    ///     schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevoke([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///     },\\\\n    ///     {\\\\n    ///         schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\\\n    ///         data: [{\\\\n    ///             uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\\\n    ///             value: 0\\\\n    ///         },\\\\n    ///     }])\\\\n    function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\\\n\\\\n    /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\\\n    /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\\\n    ///     should be grouped by distinct schema ids to benefit from the best batching optimization.\\\\n    ///\\\\n    /// Example:\\\\n    ///     multiRevokeByDelegation([{\\\\n    ///         schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\\\n    ///         data: [{\\\\n    ///             uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\\\n    ///             value: 1000\\\\n    ///         },\\\\n    ///         {\\\\n    ///             uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\\\n    ///             value: 0\\\\n    ///         }],\\\\n    ///         signatures: [{\\\\n    ///             v: 28,\\\\n    ///             r: '0x148c...b25b',\\\\n    ///             s: '0x5a72...be22'\\\\n    ///         },\\\\n    ///         {\\\\n    ///             v: 28,\\\\n    ///             r: '0x487s...67bb',\\\\n    ///             s: '0x12ad...2366'\\\\n    ///         }],\\\\n    ///         revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\\\n    ///         deadline: 1673891048\\\\n    ///     }])\\\\n    function multiRevokeByDelegation(\\\\n        MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\\\n    ) external payable;\\\\n\\\\n    /// @notice Timestamps the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function timestamp(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Timestamps the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function revokeOffchain(bytes32 data) external returns (uint64);\\\\n\\\\n    /// @notice Revokes the specified multiple bytes32 data.\\\\n    /// @param data The data to timestamp.\\\\n    /// @return The timestamp the data was revoked with.\\\\n    function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\\\n\\\\n    /// @notice Returns an existing attestation by UID.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return The attestation data members.\\\\n    function getAttestation(bytes32 uid) external view returns (Attestation memory);\\\\n\\\\n    /// @notice Checks whether an attestation exists.\\\\n    /// @param uid The UID of the attestation to retrieve.\\\\n    /// @return Whether an attestation exists.\\\\n    function isAttestationValid(bytes32 uid) external view returns (bool);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getTimestamp(bytes32 data) external view returns (uint64);\\\\n\\\\n    /// @notice Returns the timestamp that the specified data was timestamped with.\\\\n    /// @param data The data to query.\\\\n    /// @return The timestamp the data was timestamped with.\\\\n    function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\nimport { ISchemaResolver } from \\\\\\\"./resolver/ISchemaResolver.sol\\\\\\\";\\\\n\\\\n/// @notice A struct representing a record for a submitted schema.\\\\nstruct SchemaRecord {\\\\n    bytes32 uid; // The unique identifier of the schema.\\\\n    ISchemaResolver resolver; // Optional schema resolver.\\\\n    bool revocable; // Whether the schema allows revocations explicitly.\\\\n    string schema; // Custom specification of the schema (e.g., an ABI).\\\\n}\\\\n\\\\n/// @title ISchemaRegistry\\\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\\\ninterface ISchemaRegistry is ISemver {\\\\n    /// @notice Emitted when a new schema has been registered\\\\n    /// @param uid The schema UID.\\\\n    /// @param registerer The address of the account used to register the schema.\\\\n    /// @param schema The schema data.\\\\n    event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\\\n\\\\n    /// @notice Submits and reserves a new schema\\\\n    /// @param schema The schema data schema.\\\\n    /// @param resolver An optional schema resolver.\\\\n    /// @param revocable Whether the schema allows revocations explicitly.\\\\n    /// @return The UID of the new schema.\\\\n    function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\\\n\\\\n    /// @notice Returns an existing schema by UID\\\\n    /// @param uid The UID of the schema to retrieve.\\\\n    /// @return The schema data members.\\\\n    function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/// @title ISemver\\\\n/// @notice A semver interface.\\\\ninterface ISemver {\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity 0.8.27;\\\\n\\\\nimport { IEAS, Attestation } from \\\\\\\"./IEAS.sol\\\\\\\";\\\\nimport { EMPTY_UID, uncheckedInc } from \\\\\\\"./Common.sol\\\\\\\";\\\\nimport { Semver } from \\\\\\\"./Semver.sol\\\\\\\";\\\\n\\\\n/// @title Indexer\\\\n/// @notice Indexing Service for the Ethereum Attestation Service\\\\ncontract Indexer is Semver {\\\\n    error InvalidEAS();\\\\n    error InvalidAttestation();\\\\n    error InvalidOffset();\\\\n\\\\n    /// @notice Emitted when an attestation has been indexed.\\\\n    /// @param uid The UID the attestation.\\\\n    event Indexed(bytes32 indexed uid);\\\\n\\\\n    /// A mapping between an account and its received attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\\\n\\\\n    // A mapping between an account and its sent attestations.\\\\n    mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\\\n\\\\n    // A mapping between a schema, attester, and recipient.\\\\n    mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\\\n        private _schemaAttesterRecipientAttestations;\\\\n\\\\n    // A mapping between a schema and its attestations.\\\\n    mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\\\n\\\\n    // The global mapping of attestation indexing status.\\\\n    mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\\\n\\\\n    // The address of the global EAS contract.\\\\n    IEAS private immutable _eas;\\\\n\\\\n    /// @dev Creates a new Indexer instance.\\\\n    /// @param eas The address of the global EAS contract.\\\\n    constructor(IEAS eas) Semver(1, 3, 0) {\\\\n        if (address(eas) == address(0)) {\\\\n            revert InvalidEAS();\\\\n        }\\\\n\\\\n        _eas = eas;\\\\n    }\\\\n\\\\n    /// @notice Returns the EAS.\\\\n    function getEAS() external view returns (IEAS) {\\\\n        return _eas;\\\\n    }\\\\n\\\\n    /// @notice Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function indexAttestation(bytes32 attestationUID) external {\\\\n        _indexAttestation(attestationUID);\\\\n    }\\\\n\\\\n    /// @notice Indexes multiple existing attestations.\\\\n    /// @param attestationUIDs The UIDs of the attestations to index.\\\\n    function indexAttestations(bytes32[] calldata attestationUIDs) external {\\\\n        uint256 length = attestationUIDs.length;\\\\n        for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\\\n            _indexAttestation(attestationUIDs[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /// @notice Returns whether an existing attestation has been already indexed.\\\\n    /// @param attestationUID The UID of the attestation to check.\\\\n    /// @return Whether an attestation has been already indexed.\\\\n    function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\\\n        return _indexedAttestations[attestationUID];\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\\\n    ///     recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getReceivedAttestationUIDs(\\\\n        address recipient,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\\\n    ///     specific recipient.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _receivedAttestations[recipient][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSentAttestationUIDs(\\\\n        address attester,\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\\\n    /// attester.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return The total number of attestations.\\\\n    function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\\\n        return _sentAttestations[attester][schemaUID].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\\\n    ///     specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return\\\\n            _sliceUIDs(\\\\n                _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\\\n                start,\\\\n                length,\\\\n                reverseOrder\\\\n            );\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\\\n    ///     attester to a specific recipient.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param attester The attester of the attestation.\\\\n    /// @param recipient The recipient of the attestation.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttesterRecipientAttestationUIDCount(\\\\n        bytes32 schemaUID,\\\\n        address attester,\\\\n        address recipient\\\\n    ) external view returns (uint256) {\\\\n        return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\\\n    }\\\\n\\\\n    /// @notice Returns the UIDs of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDs(\\\\n        bytes32 schemaUID,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) external view returns (bytes32[] memory) {\\\\n        return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\\\n    }\\\\n\\\\n    /// @notice Returns the total number of attestations to a specific schema.\\\\n    /// @param schemaUID The UID of the schema.\\\\n    /// @return An array of attestation UIDs.\\\\n    function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\\\n        return _schemaAttestations[schemaUID].length;\\\\n    }\\\\n\\\\n    /// @dev Indexes an existing attestation.\\\\n    /// @param attestationUID The UID of the attestation to index.\\\\n    function _indexAttestation(bytes32 attestationUID) private {\\\\n        // Skip already indexed attestations.\\\\n        if (_indexedAttestations[attestationUID]) {\\\\n            return;\\\\n        }\\\\n\\\\n        // Check if the attestation exists.\\\\n        Attestation memory attestation = _eas.getAttestation(attestationUID);\\\\n\\\\n        bytes32 uid = attestation.uid;\\\\n        if (uid == EMPTY_UID) {\\\\n            revert InvalidAttestation();\\\\n        }\\\\n\\\\n        // Index the attestation.\\\\n        address attester = attestation.attester;\\\\n        address recipient = attestation.recipient;\\\\n        bytes32 schemaUID = attestation.schema;\\\\n\\\\n        _indexedAttestations[attestationUID] = true;\\\\n        _schemaAttestations[schemaUID].push(attestationUID);\\\\n        _receivedAttestations[recipient][schemaUID].push(attestationUID);\\\\n        _sentAttestations[attester][schemaUID].push(attestationUID);\\\\n        _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\\\n\\\\n        emit Indexed({ uid: uid });\\\\n    }\\\\n\\\\n    /// @dev Returns a slice in an array of attestation UIDs.\\\\n    /// @param uids The array of attestation UIDs.\\\\n    /// @param start The offset to start from.\\\\n    /// @param length The number of total members to retrieve.\\\\n    /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\\\n    /// @return An array of attestation UIDs.\\\\n    function _sliceUIDs(\\\\n        bytes32[] memory uids,\\\\n        uint256 start,\\\\n        uint256 length,\\\\n        bool reverseOrder\\\\n    ) private pure returns (bytes32[] memory) {\\\\n        uint256 attestationsLength = uids.length;\\\\n        if (attestationsLength == 0) {\\\\n            return new bytes32[](0);\\\\n        }\\\\n\\\\n        if (start >= attestationsLength) {\\\\n            revert InvalidOffset();\\\\n        }\\\\n\\\\n        unchecked {\\\\n            uint256 len = length;\\\\n            if (attestationsLength < start + length) {\\\\n                len = attestationsLength - start;\\\\n            }\\\\n\\\\n            bytes32[] memory res = new bytes32[](len);\\\\n\\\\n            for (uint256 i = 0; i < len; ++i) {\\\\n                res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\\\n            }\\\\n\\\\n            return res;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport { Strings } from \\\\\\\"@openzeppelin/contracts/utils/Strings.sol\\\\\\\";\\\\n\\\\nimport { ISemver } from \\\\\\\"./ISemver.sol\\\\\\\";\\\\n\\\\n/// @title Semver\\\\n/// @notice A simple contract for managing contract versions.\\\\ncontract Semver is ISemver {\\\\n    // Contract's major version number.\\\\n    uint256 private immutable _major;\\\\n\\\\n    // Contract's minor version number.\\\\n    uint256 private immutable _minor;\\\\n\\\\n    // Contract's patch version number.\\\\n    uint256 private immutable _patch;\\\\n\\\\n    /// @dev Create a new Semver instance.\\\\n    /// @param major Major version number.\\\\n    /// @param minor Minor version number.\\\\n    /// @param patch Patch version number.\\\\n    constructor(uint256 major, uint256 minor, uint256 patch) {\\\\n        _major = major;\\\\n        _minor = minor;\\\\n        _patch = patch;\\\\n    }\\\\n\\\\n    /// @notice Returns the full semver contract version.\\\\n    /// @return Semver contract version as a string.\\\\n    function version() external view returns (string memory) {\\\\n        return\\\\n            string(\\\\n                abi.encodePacked(Strings.toString(_major), \\\\\\\".\\\\\\\", Strings.toString(_minor), \\\\\\\".\\\\\\\", Strings.toString(_patch))\\\\n            );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport { Attestation } from \\\\\\\"./../Common.sol\\\\\\\";\\\\nimport { ISemver } from \\\\\\\"./../ISemver.sol\\\\\\\";\\\\n\\\\n/// @title ISchemaResolver\\\\n/// @notice The interface of an optional schema resolver.\\\\ninterface ISchemaResolver is ISemver {\\\\n    /// @notice Checks if the resolver can be sent ETH.\\\\n    /// @return Whether the resolver supports ETH transfers.\\\\n    function isPayable() external pure returns (bool);\\\\n\\\\n    /// @notice Processes an attestation and verifies whether it's valid.\\\\n    /// @param attestation The new attestation.\\\\n    /// @return Whether the attestation is valid.\\\\n    function attest(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes multiple attestations and verifies whether they are valid.\\\\n    /// @param attestations The new attestations.\\\\n    /// @param values Explicit ETH amounts which were sent with each attestation.\\\\n    /// @return Whether all the attestations are valid.\\\\n    function multiAttest(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n\\\\n    /// @notice Processes an attestation revocation and verifies if it can be revoked.\\\\n    /// @param attestation The existing attestation to be revoked.\\\\n    /// @return Whether the attestation can be revoked.\\\\n    function revoke(Attestation calldata attestation) external payable returns (bool);\\\\n\\\\n    /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\\\n    /// @param attestations The existing attestations to be revoked.\\\\n    /// @param values Explicit ETH amounts which were sent with each revocation.\\\\n    /// @return Whether the attestations can be revoked.\\\\n    function multiRevoke(\\\\n        Attestation[] calldata attestations,\\\\n        uint256[] calldata values\\\\n    ) external payable returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\nimport {Math} from \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport {SignedMath} from \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant HEX_DIGITS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev The `value` string doesn't fit in the specified `length`.\\\\n     */\\\\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toStringSigned(int256 value) internal pure returns (string memory) {\\\\n        return string.concat(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        uint256 localValue = value;\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\\\\n            localValue >>= 4;\\\\n        }\\\\n        if (localValue != 0) {\\\\n            revert StringsInsufficientHexLength(value, length);\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\\\n     * representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    /**\\\\n     * @dev Muldiv operation overflow.\\\\n     */\\\\n    error MathOverflowedMulDiv();\\\\n\\\\n    enum Rounding {\\\\n        Floor, // Toward negative infinity\\\\n        Ceil, // Toward positive infinity\\\\n        Trunc, // Toward zero\\\\n        Expand // Away from zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            uint256 c = a + b;\\\\n            if (c < a) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b > a) return (false, 0);\\\\n            return (true, a - b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\\\n     */\\\\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\\\n            // benefit is lost if 'b' is also tested.\\\\n            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\\\n            if (a == 0) return (true, 0);\\\\n            uint256 c = a * b;\\\\n            if (c / a != b) return (false, 0);\\\\n            return (true, c);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a / b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\\\n     */\\\\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\\\n        unchecked {\\\\n            if (b == 0) return (false, 0);\\\\n            return (true, a % b);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds towards infinity instead\\\\n     * of rounding towards zero.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        if (b == 0) {\\\\n            // Guarantee the same behavior as in a regular Solidity division.\\\\n            return a / b;\\\\n        }\\\\n\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\\\n     * denominator == 0.\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\\\n     * Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0 = x * y; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            if (denominator <= prod1) {\\\\n                revert MathOverflowedMulDiv();\\\\n            }\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\\\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            uint256 twos = denominator & (0 - denominator);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\\\n            // works in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\\\n     * towards zero.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\\\n     */\\\\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\\\n        return uint8(rounding) % 2 == 1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.20;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\",\n  \"devdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"params\": {\n          \"uid\": \"The UID the attestation.\"\n        }\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Creates a new Indexer instance.\",\n        \"params\": {\n          \"eas\": \"The address of the global EAS contract.\"\n        }\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"params\": {\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"recipient\": \"The recipient of the attestation.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"schemaUID\": \"The UID of the schema.\"\n        },\n        \"returns\": {\n          \"_0\": \"The total number of attestations.\"\n        }\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"params\": {\n          \"attester\": \"The attester of the attestation.\",\n          \"length\": \"The number of total members to retrieve.\",\n          \"reverseOrder\": \"Whether the offset starts from the end and the data is returned in reverse.\",\n          \"schemaUID\": \"The UID of the schema.\",\n          \"start\": \"The offset to start from.\"\n        },\n        \"returns\": {\n          \"_0\": \"An array of attestation UIDs.\"\n        }\n      },\n      \"indexAttestation(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to index.\"\n        }\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"params\": {\n          \"attestationUIDs\": \"The UIDs of the attestations to index.\"\n        }\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"params\": {\n          \"attestationUID\": \"The UID of the attestation to check.\"\n        },\n        \"returns\": {\n          \"_0\": \"Whether an attestation has been already indexed.\"\n        }\n      },\n      \"version()\": {\n        \"returns\": {\n          \"_0\": \"Semver contract version as a string.\"\n        }\n      }\n    },\n    \"title\": \"Indexer\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"events\": {\n      \"Indexed(bytes32)\": {\n        \"notice\": \"Emitted when an attestation has been indexed.\"\n      }\n    },\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getEAS()\": {\n        \"notice\": \"Returns the EAS.\"\n      },\n      \"getReceivedAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested to/received by a     specific recipient.\"\n      },\n      \"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific     recipient.\"\n      },\n      \"getSchemaAttestationUIDCount(bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema.\"\n      },\n      \"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\": {\n        \"notice\": \"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific     attester to a specific recipient.\"\n      },\n      \"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a     specific recipient.\"\n      },\n      \"getSentAttestationUIDCount(address,bytes32)\": {\n        \"notice\": \"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\": {\n        \"notice\": \"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"\n      },\n      \"indexAttestation(bytes32)\": {\n        \"notice\": \"Indexes an existing attestation.\"\n      },\n      \"indexAttestations(bytes32[])\": {\n        \"notice\": \"Indexes multiple existing attestations.\"\n      },\n      \"isAttestationIndexed(bytes32)\": {\n        \"notice\": \"Returns whether an existing attestation has been already indexed.\"\n      },\n      \"version()\": {\n        \"notice\": \"Returns the full semver contract version.\"\n      }\n    },\n    \"notice\": \"Indexing Service for the Ethereum Attestation Service\",\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 2421,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_receivedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2428,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_sentAttestations\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttesterRecipientAttestations\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\"\n      },\n      {\n        \"astId\": 2442,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_schemaAttestations\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      {\n        \"astId\": 2446,\n        \"contract\": \"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer\",\n        \"label\": \"_indexedAttestations\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(bytes32 => bytes32[]))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\"\n      },\n      \"t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => mapping(address => mapping(address => bytes32[])))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "deployments/unichain/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0x4200000000000000000000000000000000000020\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/unichain/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/unichain/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/unichain/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BigNumberish,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PayableOverrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: PromiseOrValue<string>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocable: PromiseOrValue<boolean>;\n  refUID: PromiseOrValue<BytesLike>;\n  data: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  string,\n  BigNumber,\n  boolean,\n  string,\n  string,\n  BigNumber\n] & {\n  recipient: string;\n  expirationTime: BigNumber;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: BigNumber;\n};\n\nexport type AttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type EIP712SignatureStruct = {\n  v: PromiseOrValue<BigNumberish>;\n  r: PromiseOrValue<BytesLike>;\n  s: PromiseOrValue<BytesLike>;\n};\n\nexport type EIP712SignatureStructOutput = [number, string, string] & {\n  v: number;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  attester: PromiseOrValue<string>;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  attester: string;\n};\n\nexport type AttestationStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  schema: PromiseOrValue<BytesLike>;\n  time: PromiseOrValue<BigNumberish>;\n  expirationTime: PromiseOrValue<BigNumberish>;\n  revocationTime: PromiseOrValue<BigNumberish>;\n  refUID: PromiseOrValue<BytesLike>;\n  recipient: PromiseOrValue<string>;\n  attester: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  data: PromiseOrValue<BytesLike>;\n};\n\nexport type AttestationStructOutput = [\n  string,\n  string,\n  BigNumber,\n  BigNumber,\n  BigNumber,\n  string,\n  string,\n  string,\n  boolean,\n  string\n] & {\n  uid: string;\n  schema: string;\n  time: BigNumber;\n  expirationTime: BigNumber;\n  revocationTime: BigNumber;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: AttestationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  attester: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  string,\n  AttestationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  attester: string;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  value: PromiseOrValue<BigNumberish>;\n};\n\nexport type RevocationRequestDataStructOutput = [string, BigNumber] & {\n  uid: string;\n  value: BigNumber;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct[];\n  signatures: EIP712SignatureStruct[];\n  revoker: PromiseOrValue<string>;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput[],\n  EIP712SignatureStructOutput[],\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: EIP712SignatureStructOutput[];\n  revoker: string;\n};\n\nexport type RevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: PromiseOrValue<BytesLike>;\n  data: RevocationRequestDataStruct;\n  signature: EIP712SignatureStruct;\n  revoker: PromiseOrValue<string>;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  string,\n  RevocationRequestDataStructOutput,\n  EIP712SignatureStructOutput,\n  string\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: EIP712SignatureStructOutput;\n  revoker: string;\n};\n\nexport interface EASInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))\": FunctionFragment;\n    \"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"getAttestTypeHash()\": FunctionFragment;\n    \"getAttestation(bytes32)\": FunctionFragment;\n    \"getDomainSeparator()\": FunctionFragment;\n    \"getName()\": FunctionFragment;\n    \"getNonce(address)\": FunctionFragment;\n    \"getRevokeOffchain(address,bytes32)\": FunctionFragment;\n    \"getRevokeTypeHash()\": FunctionFragment;\n    \"getSchemaRegistry()\": FunctionFragment;\n    \"getTimestamp(bytes32)\": FunctionFragment;\n    \"isAttestationValid(bytes32)\": FunctionFragment;\n    \"multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])\": FunctionFragment;\n    \"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevoke((bytes32,(bytes32,uint256)[])[])\": FunctionFragment;\n    \"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])\": FunctionFragment;\n    \"multiRevokeOffchain(bytes32[])\": FunctionFragment;\n    \"multiTimestamp(bytes32[])\": FunctionFragment;\n    \"revoke((bytes32,(bytes32,uint256)))\": FunctionFragment;\n    \"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))\": FunctionFragment;\n    \"revokeOffchain(bytes32)\": FunctionFragment;\n    \"timestamp(bytes32)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic:\n      | \"VERSION\"\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [PromiseOrValue<string>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [PromiseOrValue<BytesLike>[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n\n  events: {\n    \"Attested(address,address,bytes32,bytes32)\": EventFragment;\n    \"Revoked(address,address,bytes32,bytes32)\": EventFragment;\n    \"RevokedOffchain(address,bytes32,uint64)\": EventFragment;\n    \"Timestamped(bytes32,uint64)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Attested\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Revoked\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"RevokedOffchain\"): EventFragment;\n  getEvent(nameOrSignatureOrTopic: \"Timestamped\"): EventFragment;\n}\n\nexport interface AttestedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type AttestedEvent = TypedEvent<\n  [string, string, string, string],\n  AttestedEventObject\n>;\n\nexport type AttestedEventFilter = TypedEventFilter<AttestedEvent>;\n\nexport interface RevokedEventObject {\n  recipient: string;\n  attester: string;\n  uid: string;\n  schema: string;\n}\nexport type RevokedEvent = TypedEvent<\n  [string, string, string, string],\n  RevokedEventObject\n>;\n\nexport type RevokedEventFilter = TypedEventFilter<RevokedEvent>;\n\nexport interface RevokedOffchainEventObject {\n  revoker: string;\n  data: string;\n  timestamp: BigNumber;\n}\nexport type RevokedOffchainEvent = TypedEvent<\n  [string, string, BigNumber],\n  RevokedOffchainEventObject\n>;\n\nexport type RevokedOffchainEventFilter = TypedEventFilter<RevokedOffchainEvent>;\n\nexport interface TimestampedEventObject {\n  data: string;\n  timestamp: BigNumber;\n}\nexport type TimestampedEvent = TypedEvent<\n  [string, BigNumber],\n  TimestampedEventObject\n>;\n\nexport type TimestampedEventFilter = TypedEventFilter<TimestampedEvent>;\n\nexport interface EAS extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[AttestationStructOutput]>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<[string]>;\n\n    getName(overrides?: CallOverrides): Promise<[string]>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[BigNumber]>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[boolean]>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  attest(\n    request: AttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  attestByDelegation(\n    delegatedRequest: DelegatedAttestationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getAttestation(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<AttestationStructOutput>;\n\n  getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n  getName(overrides?: CallOverrides): Promise<string>;\n\n  getNonce(\n    account: PromiseOrValue<string>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeOffchain(\n    revoker: PromiseOrValue<string>,\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n  getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n  getTimestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<BigNumber>;\n\n  isAttestationValid(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<boolean>;\n\n  multiAttest(\n    multiRequests: MultiAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiAttestByDelegation(\n    multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevoke(\n    multiRequests: MultiRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeByDelegation(\n    multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiRevokeOffchain(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  multiTimestamp(\n    data: PromiseOrValue<BytesLike>[],\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revoke(\n    request: RevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeByDelegation(\n    delegatedRequest: DelegatedRevocationRequestStruct,\n    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  revokeOffchain(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  timestamp(\n    data: PromiseOrValue<BytesLike>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<string>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<AttestationStructOutput>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<string>;\n\n    getName(overrides?: CallOverrides): Promise<string>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<string>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<string>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<boolean>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<string[]>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: CallOverrides\n    ): Promise<void>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n  };\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n    Attested(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): AttestedEventFilter;\n\n    \"Revoked(address,address,bytes32,bytes32)\"(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n    Revoked(\n      recipient?: PromiseOrValue<string> | null,\n      attester?: PromiseOrValue<string> | null,\n      uid?: null,\n      schema?: PromiseOrValue<BytesLike> | null\n    ): RevokedEventFilter;\n\n    \"RevokedOffchain(address,bytes32,uint64)\"(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n    RevokedOffchain(\n      revoker?: PromiseOrValue<string> | null,\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): RevokedOffchainEventFilter;\n\n    \"Timestamped(bytes32,uint64)\"(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n    Timestamped(\n      data?: PromiseOrValue<BytesLike> | null,\n      timestamp?: PromiseOrValue<BigNumberish> | null\n    ): TimestampedEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getDomainSeparator(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getName(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    attest(\n      request: AttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    attestByDelegation(\n      delegatedRequest: DelegatedAttestationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    getAttestTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getAttestation(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getDomainSeparator(\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getName(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getNonce(\n      account: PromiseOrValue<string>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeOffchain(\n      revoker: PromiseOrValue<string>,\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    getRevokeTypeHash(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchemaRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getTimestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    isAttestationValid(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    multiAttest(\n      multiRequests: MultiAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiAttestByDelegation(\n      multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevoke(\n      multiRequests: MultiRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeByDelegation(\n      multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[],\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiRevokeOffchain(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    multiTimestamp(\n      data: PromiseOrValue<BytesLike>[],\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revoke(\n      request: RevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeByDelegation(\n      delegatedRequest: DelegatedRevocationRequestStruct,\n      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    revokeOffchain(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n\n    timestamp(\n      data: PromiseOrValue<BytesLike>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/unichain/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumber,\n  BytesLike,\n  CallOverrides,\n  ContractTransaction,\n  Overrides,\n  PopulatedTransaction,\n  Signer,\n  utils,\n} from \"ethers\";\nimport type {\n  FunctionFragment,\n  Result,\n  EventFragment,\n} from \"@ethersproject/abi\";\nimport type { Listener, Provider } from \"@ethersproject/providers\";\nimport type {\n  TypedEventFilter,\n  TypedEvent,\n  TypedListener,\n  OnEvent,\n  PromiseOrValue,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: PromiseOrValue<BytesLike>;\n  resolver: PromiseOrValue<string>;\n  revocable: PromiseOrValue<boolean>;\n  schema: PromiseOrValue<string>;\n};\n\nexport type SchemaRecordStructOutput = [string, string, boolean, string] & {\n  uid: string;\n  resolver: string;\n  revocable: boolean;\n  schema: string;\n};\n\nexport interface SchemaRegistryInterface extends utils.Interface {\n  functions: {\n    \"VERSION()\": FunctionFragment;\n    \"getSchema(bytes32)\": FunctionFragment;\n    \"register(string,address,bool)\": FunctionFragment;\n  };\n\n  getFunction(\n    nameOrSignatureOrTopic: \"VERSION\" | \"getSchema\" | \"register\"\n  ): FunctionFragment;\n\n  encodeFunctionData(functionFragment: \"VERSION\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [PromiseOrValue<BytesLike>]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [\n      PromiseOrValue<string>,\n      PromiseOrValue<string>,\n      PromiseOrValue<boolean>\n    ]\n  ): string;\n\n  decodeFunctionResult(functionFragment: \"VERSION\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n\n  events: {\n    \"Registered(bytes32,address)\": EventFragment;\n  };\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n}\n\nexport interface RegisteredEventObject {\n  uid: string;\n  registerer: string;\n}\nexport type RegisteredEvent = TypedEvent<\n  [string, string],\n  RegisteredEventObject\n>;\n\nexport type RegisteredEventFilter = TypedEventFilter<RegisteredEvent>;\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(signerOrProvider: Signer | Provider | string): this;\n  attach(addressOrName: string): this;\n  deployed(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TEvent extends TypedEvent>(\n    event: TypedEventFilter<TEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TEvent>>;\n\n  listeners<TEvent extends TypedEvent>(\n    eventFilter?: TypedEventFilter<TEvent>\n  ): Array<TypedListener<TEvent>>;\n  listeners(eventName?: string): Array<Listener>;\n  removeAllListeners<TEvent extends TypedEvent>(\n    eventFilter: TypedEventFilter<TEvent>\n  ): this;\n  removeAllListeners(eventName?: string): this;\n  off: OnEvent<this>;\n  on: OnEvent<this>;\n  once: OnEvent<this>;\n  removeListener: OnEvent<this>;\n\n  functions: {\n    VERSION(overrides?: CallOverrides): Promise<[string]>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<[SchemaRecordStructOutput]>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<ContractTransaction>;\n  };\n\n  VERSION(overrides?: CallOverrides): Promise<string>;\n\n  getSchema(\n    uid: PromiseOrValue<BytesLike>,\n    overrides?: CallOverrides\n  ): Promise<SchemaRecordStructOutput>;\n\n  register(\n    schema: PromiseOrValue<string>,\n    resolver: PromiseOrValue<string>,\n    revocable: PromiseOrValue<boolean>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<ContractTransaction>;\n\n  callStatic: {\n    VERSION(overrides?: CallOverrides): Promise<string>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<SchemaRecordStructOutput>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: CallOverrides\n    ): Promise<string>;\n  };\n\n  filters: {\n    \"Registered(bytes32,address)\"(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n    Registered(\n      uid?: PromiseOrValue<BytesLike> | null,\n      registerer?: null\n    ): RegisteredEventFilter;\n  };\n\n  estimateGas: {\n    VERSION(overrides?: CallOverrides): Promise<BigNumber>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<BigNumber>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<BigNumber>;\n  };\n\n  populateTransaction: {\n    VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;\n\n    getSchema(\n      uid: PromiseOrValue<BytesLike>,\n      overrides?: CallOverrides\n    ): Promise<PopulatedTransaction>;\n\n    register(\n      schema: PromiseOrValue<string>,\n      resolver: PromiseOrValue<string>,\n      revocable: PromiseOrValue<boolean>,\n      overrides?: Overrides & { from?: PromiseOrValue<string> }\n    ): Promise<PopulatedTransaction>;\n  };\n}\n"
  },
  {
    "path": "deployments/unichain/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  Indexer,\n  IndexerInterface,\n} from \"../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/unichain/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "deployments/unichain/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schema\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct EIP712Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x610160346200030457601f19906001600160401b0390601f62004c8b38819003918201851683019184831184841017620003095780849260409485528339602093849181010312620003045751916001600160a01b0383168084036200030457818351966200006e886200031f565b60038852818801966245415360e81b885285516200008c816200031f565b6004958187809352019863302e323760e01b8a528a5190209820988860e05261010099808b524660a0528751858101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9b8c84528a83015260608201524660808201523060a082015260a0815260c0810181811085821117620002ef5789525190206080523060c0526101209889528051918211620002da576000938454916001928381811c91168015620002cf575b83821014620002bc57601f811162000271575b5081601f85116001146200020b5750839450908392918694620001ff575b50501b916000199060031b1c19161790555b15620001f15750610140918252519161494f93846200033c8539608051846143de015260a05184614499015260c051846143af015260e0518461442d015251836144530152518261440a0152518181816102a901528181611e660152818161269001528181612d9c015261301a0152f35b90516311a1e69760e01b8152fd5b0151925038806200016e565b9294849081168780528488209488905b888383106200025657505050106200023c575b505050811b01905562000180565b015160001960f88460031b161c191690553880806200022e565b8587015188559096019594850194879350908101906200021b565b868052828720601f860160051c810191848710620002b1575b601f0160051c019084905b828110620002a557505062000150565b88815501849062000295565b90915081906200028a565b634e487b7160e01b875260228952602487fd5b90607f16906200013d565b604186634e487b7160e01b6000525260246000fd5b604189634e487b7160e01b6000525260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117620003095760405256fe61016060406101405280610140515260048036101561001d57600080fd5b600091823560e01c90816312b11a171461118d5750806313893f611461110557806317d7de7c14610fe25780632d0335ab14610f7a57806344adc90e14610e715780634692626714610e125780634cb7e9e514610d095780634d00307014610cc0578063831e05a114610a71578063a3112a6414610a07578063b469318d14610987578063b83010d31461092c578063cf190f34146108e2578063d45c44351461088c578063e13458fc14610790578063e30bb56314610739578063e45d03f9146104b1578063e57a6b1b1461039b578063e71ff36514610310578063ed24911d146102cd578063f10b5cc81461025c578063f17325e7146101ae5763ffa1ad741461012857600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5761014051516101a6916101688261141f565b81527f302e3237000000000000000000000000000000000000000000000000000000006020820152610140515191829160208352602083019061123e565b0390f35b5080fd5b50907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc906020823601126102595782359267ffffffffffffffff84116101aa578301916101405190843603011261025957602061024e8161024786866102296102156114eb565b92610224602436920184611553565b6115d6565b61023283611586565b5261023c82611586565b503491339135611df1565b0151611586565b516101405151908152f35b80fd5b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610140515173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610306614398565b6101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff918282116103975761035f913691016111e5565b90914216925b818110610379576020846101405151908152f35b806103918561038b6001948688611a39565b356141c0565b01610365565b8380fd5b5060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101405151906103d58261139c565b358082526103e236611981565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126104ad57610140515161041f81611403565b60643560ff811681036104a9578152608435602082015260a435610140518201526101405183015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361039757610479838260606104a596015261487c565b610481611932565b61048a36611981565b61049382611586565b5261049d81611586565b503492612d4f565b5080f35b8480fd5b8280fd5b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5767ffffffffffffffff82358181116104a95784926104ff8592369084016111e5565b91903493865b848110610510578780f35b6105208186859a9798999a61189e565b906080823603126107315761014051519761053a8961139c565b82358952858301358a811161073557830196601f973689820112156101aa5761056990369089813591016119c7565b94878b01958652610140518501358c81116104ad5785019836908a0112156101aa57883596610597886114d3565b996105a761014051519b8c611458565b888b52898b018a6060809b0283010191368311610731578b808c9201925b84841061071957505090506105e591508d6101405101978c8952016112a4565b96888d0197885251998a51801591821561070d575b50506106e257825b8a51811015610673578061066d8c8f8b8b8f926106448761063c60019a73ffffffffffffffffffffffffffffffffffffffff9451986115c2565b5193516115c2565b51925116926101405151946106588661139c565b8552840152610140518301528c82015261487c565b01610602565b5099986106d6949897506001955083906106d0939d97929c519073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d018c1494511691612fcc565b90611862565b91969195929301610505565b5061014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508e806105fa565b6107233685611698565b8152019101908b8b916105c5565b8580fd5b8780fd5b5090346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061078483356000526002602052604060002054151590565b61014051519015158152f35b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916020833601126102595767ffffffffffffffff9282358481116104ad5760c08185019282360301126104ad576101405151946107ee8661139c565b82359485875260248301948535928311610259575060209661086b6102479561085860a461024e9a9761082b8d9b986108849836918401016115d6565b8b87015261083c3660448301611698565b61014051870152019361084e856112a4565b60608201526144bf565b6102246108636114eb565b953692611553565b61087484611586565b5261087e83611586565b506116d6565b903492611df1565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff913581526003835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff421680923533614266565b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061014051517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b50346101aa57610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff6109e3611281565b16825283526101405181206024358252835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a691610a5b91610a47611a49565b503581526002602052610140519020611ae7565b6101405151918291602083526020830190611300565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff81116104ad57610abb8391369084016111e5565b9092610ac6826116f7565b9383346101205280935b808510610af2576101a6610ae4878961432b565b6101405151918291826112c5565b9091929394610b0286838661189e565b610b0f602082018261179e565b80929192158015610ca6575b610c7b578560608301928035915b838110610bbb57505092602092610b829260019695610b7c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494610b7461012051956116d6565b9336916117f2565b9061261e565b610b90815161012051611862565b61012052018051610ba1898b6115c2565b52610bac888a6115c2565b50515101950193929190610ad0565b610bca8160051b870187611553565b610bd9610140518401846118de565b831015610c4f576001929173ffffffffffffffffffffffffffffffffffffffff610c4992610c37610c098b6116d6565b91610c26610140515195610c1c8761139c565b8b875236906115d6565b602086015236906060880201611698565b610140518401521660608201526144bf565b01610b29565b60248b60328f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8761014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b50610cb6610140518301836118de565b9050811415610b1b565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff42168092356141c0565b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad57813567ffffffffffffffff928382116104a957610d54913691016111e5565b8493919290345b818610610d66578680f35b610d7186838761175e565b838101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215610e0e57810191823592868411610e0a578501928060061b36038413610e0a57600193826106d092610e0295610dfb8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494339336916119c7565b9035612fcc565b950194610d5b565b8980fd5b8880fd5b5060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576104a590610e49611932565b90610e5336611981565b610e5c83611586565b52610e6682611586565b503491339135612d4f565b50602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5780359067ffffffffffffffff821161039757610ebe9084923691016111e5565b90610ec8826116f7565b93833490937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610610f06576101a6610ae4888a61432b565b90919293949560019085610f51610f488a8888610f24838a8f61175e565b610f41610f338883018361179e565b9390951494339336916117f2565b903561261e565b96875190611862565b95018051610f5f8a8c6115c2565b52610f6a898b6115c2565b5051510196019493929190610ef2565b82346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595760209073ffffffffffffffffffffffffffffffffffffffff610fca611281565b16815260018252610140519020546101405151908152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595761014051519080805461102381611a94565b808552916001918083169081156110bd5750600114611063575b6101a68561104d81870382611458565b610140515191829160208352602083019061123e565b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106110a557505050810160200161104d826101a661103d565b8054602085870181019190915290930192810161108a565b8695506101a69693506020925061104d9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929361103d565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff9182821161039757611154913691016111e5565b90914216925b81811061116e576020846101405151908152f35b80611187856111806001948688611a39565b3533614266565b0161115a565b8390346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156112165782359167ffffffffffffffff8311611216576020808501948460051b01011161121657565b600080fd5b60005b83811061122e5750506000910152565b818101518382015260200161121e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361127a8151809281875287808801910161121b565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b6020908160408183019282815285518094520193019160005b8281106112ec575050505090565b8351855293810193928101926001016112de565b9061139991805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e08301526101008082015115159083015261012080910151916101408092820152019061123e565b90565b6080810190811067ffffffffffffffff8211176113b857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176113b857604052565b6060810190811067ffffffffffffffff8211176113b857604052565b6040810190811067ffffffffffffffff8211176113b857604052565b610140810190811067ffffffffffffffff8211176113b857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b857604052565b67ffffffffffffffff81116113b857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116113b85760051b60200190565b6040908151916114fa8361141f565b60018352829160005b60208082101561154b5783516020929161151c826113e7565b6000825260008183015260008683015260606000818401526080830152600060a0830152828801015201611503565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215611216570190565b8051156115935760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156115935760209160051b010190565b91909160c08184031261121657604051906115f0826113e7565b81936115fb826112a4565b835260209167ffffffffffffffff8184013581811681036112165784860152604082013580151581036112165760408601526060820135606086015260808201359081116112165781019180601f840112156112165782359261165d84611499565b9161166b6040519384611458565b84835285858301011161121657848460a09695879660009401838601378301015260808501520135910152565b9190826060910312611216576040516116b081611403565b8092803560ff811681036112165760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036112165790565b90611701826114d3565b61170e6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061173c82946114d3565b019060005b82811061174d57505050565b806060602080938501015201611741565b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff821161121657602001918160051b3603831361121657565b929190926117ff846114d3565b9161180d6040519384611458565b829480845260208094019060051b8301928284116112165780915b84831061183757505050505050565b823567ffffffffffffffff811161121657869161185786849386016115d6565b815201920191611828565b9190820391821161186f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff82116112165760200191606082023603831361121657565b6040908151916119418361141f565b600183528291600091825b602080821015611978578251602092916119658261141f565b868252868183015282890101520161194c565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261121657604051906119b88261141f565b60243582526044356020830152565b9291926119d3826114d3565b6040926119e284519283611458565b819581835260208093019160061b84019381851161121657915b848310611a0b57505050505050565b8583830312611216578386918251611a228161141f565b8535815282860135838201528152019201916119fc565b91908110156115935760051b0190565b60405190611a568261143b565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c92168015611add575b6020831014611aae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611aa3565b9060405191611af58361143b565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c1615156101008501520190604051938492600092815491611b9283611a94565b80875292828116908115611c075750600114611bc1575b505050506101209291611bbd910384611458565b0152565b60009081528381209695945091905b818310611bef57509394509192509082010181611bbd61012038611ba9565b86548884018501529586019587945091830191611bd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b830101905081611bbd61012038611ba9565b60405190611c548261141f565b6060602083600081520152565b90611c6b826114d3565b611c786040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ca682946114d3565b0190602036910137565b5190811515820361121657565b906020808383031261121657825167ffffffffffffffff938482116112165701926080848403126112165760405193611cf58561139c565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036112165783860152611d2a60408201611cb0565b60408601526060810151918211611216570182601f8201121561121657805190611d5382611499565b93611d616040519586611458565b8285528383830101116112165782611d7c938501910161121b565b606082015290565b90611d8e826114d3565b611d9b6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611dc982946114d3565b019060005b828110611dda57505050565b602090611de5611a49565b82828501015201611dce565b9192608052611dfe611c47565b50805190611e0a611c47565b60a052611e1682611c61565b602060a05101526040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815283600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015612612576000610100526125ec575b506101005151156125c2579091611eaf83611d84565b60e052611ebb83611c61565b60c0526000915b838310611eed575050505050611ee360805160c05160e051610100516132bc565b60a0515260a05190565b611efd83829793949596976115c2565b519167ffffffffffffffff60208401511680151590816125ad575b506125835760406101005101511580612576575b61254c5760608301519567ffffffffffffffff6020850151169673ffffffffffffffffffffffffffffffffffffffff85511660408601511515906080870151926040519a611f798c61143b565b60008c528960208d015267ffffffffffffffff421660408d015260608c0152600060808c015260a08b015260c08a015273ffffffffffffffffffffffffffffffffffffffff8a1660e08a015261010089015261012088015260005b602088015160c08901516120dd609d60e08c015160408d01518d60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182611458565b51902080600052600260205260406000205415612103575060010163ffffffff16611fd4565b905097969293909495919780845280600052600260205260406000209184518355602085015160018401556121df6002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b85789946122c16006840154611a94565b601f81116124f1575b50602090601f8311600114612424576006929160009183612419575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060810151806123c9575b5073ffffffffffffffffffffffffffffffffffffffff9060019561234a8660e0516115c2565b526123578560e0516115c2565b5060a08101516123698660c0516115c2565b528261237b86602060a05101516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8b1693a401919290611ec2565b6123e29193506000526002602052604060002054151590565b156123ef57869138612324565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806122e6565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106124d65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061249f575b505050811b01910155612319565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612491565b8183015184558d985060019093019260209283019201612435565b90919293949550600684016000526020600020601f840160051c810160208510612545575b908c979695949392915b601f830160051c820181106125365750506122ca565b600081558d9850600101612520565b5080612516565b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408301511515611f2c565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff4216101538611f18565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b612608903d806000833e6126008183611458565b810190611cbd565b6101005238611e99565b6040513d6000823e3d90fd5b929094939161262b611c47565b50855193612637611c47565b9461264181611c61565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561261257600092612d32575b508151156125c257929790916126d684611d84565b986126e085611c61565b946000935b818510612702575050505050956126fd949596613520565b815290565b919593989496999092976127168a846115c2565b519a67ffffffffffffffff60208d0151168015159081612d1d575b506125835760408901511580612d10575b61254c57899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f906127938261143b565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b6128be609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b519020806000526002602052604060002054156128e4575060010163ffffffff166127ed565b90509d979b9199929a949d9c909698939c80845280600052600260205260406000209184518355602085015160018401556129c66002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b8578894612aa86006840154611a94565b601f8111612cb5575b50602090601f8311600114612be8576006929160009183612bdd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180612bb0575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b46848660019e612b4083612b5e9a6115c2565b526115c2565b50612b568460a0890151926115c2565b5201516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a6126e5565b92505050612bcd9193506000526002602052604060002054151590565b156123ef5785918d8b8b38612b0e565b015190503880612acd565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085168110612c9a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610612c63575b505050811b01910155612b00565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612c55565b8183015184558c985060019093019260209283019201612bf9565b90919293949550600684016000526020600020601f840160051c810160208510612d09575b908b979695949392915b601f830160051c82018110612cfa575050612ab1565b600081558c9850600101612ce4565b5080612cda565b5060408c01511515612742565b905067ffffffffffffffff4216101538612731565b612d489192503d806000833e6126008183611458565b90386126c1565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561261257600091612fb1575b508051156125c2578251612de081611d84565b92612dea82611c61565b9460005b838110612e045750505050611399949550613701565b612e0e81836115c2565b5190815160005260028060205260406000208054156123ef57856001820154036125c2578c73ffffffffffffffffffffffffffffffffffffffff6005830154911673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8282015460801c16612f5d5790810180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c9190612ee282611ae7565b612eec858c6115c2565b52612ef7848b6115c2565b506020810151612f07858d6115c2565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a401612dee565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b612fc691503d806000833e6126008183611458565b38612dcd565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612612576000916131ed575b508051156125c257865161305e81611d84565b9261306882611c61565b9460005b8381106130825750505050611399959650613900565b61308c818c6115c2565b519081516000526002918260205260406000208054156123ef57846001820154036125c257600581015473ffffffffffffffffffffffffffffffffffffffff871673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8482015460801c16612f5d5792830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261315d81611ae7565b613167848b6115c2565b52613172838a6115c2565b506020820151613182848c6115c2565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161306c565b61320291503d806000833e6126008183611458565b3861304b565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061327157505050508281830391015281808451928381520193019160005b82811061325d575050505090565b83518552938101939281019260010161324f565b909192959485806132ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51611300565b979801949391909101910161322e565b9092918351936001908186146134ff5773ffffffffffffffffffffffffffffffffffffffff602080950151169182156134cf579560009687915b8083106133c1575050509183929161333f9492876040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af19081156126125760009161338d575b509050156133635761139990614091565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d83116133ba575b6133a18183611458565b8101031261025957506133b390611cb0565b8038613352565b503d613397565b909197966133cf89876115c2565b5180151580613449575b61341f578181116133f5578084920398019801909190916132f6565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613490575b50156133d9565b908982813d83116134be575b6134a68183611458565b8101031261025957506134b890611cb0565b38613489565b503d61349c565b513d6000823e3d90fd5b9594505050905060005b8281106134e95750505050600090565b6134f381836115c2565b5161341f5783016134d9565b6113999550613519915061351290611586565b5191611586565b5191613ad8565b9093918451946001908187146136e45773ffffffffffffffffffffffffffffffffffffffff602080950151169182156136b3579660009788915b80831061360357505050918392916135a39492886040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916135cf575b50905015613363576135c6575090565b61139990614091565b82813d83116135fc575b6135e38183611458565b8101031261025957506135f590611cb0565b80386135b6565b503d6135d9565b909198976136118a876115c2565b5180151580613637575b61341f578181116133f55780849203990199019091909161355a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c5575060009161367e575b501561361b565b908982813d83116136ac575b6136948183611458565b8101031261025957506136a690611cb0565b38613677565b503d61368a565b969550505091505060005b8281106136ce5750505050600090565b6136d881836115c2565b5161341f5783016136be565b61139996506136fa915061351290959495611586565b5191613c5f565b9092918351936001908186146138e65773ffffffffffffffffffffffffffffffffffffffff602080950151169182156138b6579560009687915b80831061380657505050918392916137849492876040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916137d2575b509050156137a85761139990614091565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d83116137ff575b6137e68183611458565b8101031261025957506137f890611cb0565b8038613797565b503d6137dc565b9091979661381489876115c2565b518015158061383a575b61341f578181116133f55780849203980198019091909161373b565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613881575b501561381e565b908982813d83116138af575b6138978183611458565b8101031261025957506138a990611cb0565b3861387a565b503d61388d565b9594505050905060005b8281106138d05750505050600090565b6138da81836115c2565b5161341f5783016138c0565b61139995506138f9915061351290611586565b5191613dc7565b909391845194600190818714613abb5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613a8a579660009788915b8083106139da57505050918392916139839492886040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916139a6575b509050156137a8576135c6575090565b82813d83116139d3575b6139ba8183611458565b8101031261025957506139cc90611cb0565b8038613996565b503d6139b0565b909198976139e88a876115c2565b5180151580613a0e575b61341f578181116133f55780849203990199019091909161393a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613a55575b50156139f2565b908982813d8311613a83575b613a6b8183611458565b810103126102595750613a7d90611cb0565b38613a4e565b503d613a61565b969550505091505060005b828110613aa55750505050600090565b613aaf81836115c2565b5161341f578301613a95565b6113999650613ad1915061351290959495611586565b5191613f41565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613bd8575b61341f578385116133f557613b54829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613ba4575b50905015613b7a57816113999103614091565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613bd1575b613bb88183611458565b810103126102595750613bca90611cb0565b8038613b67565b503d613bae565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613c1d575b5015613b06565b908382813d8311613c4b575b613c338183611458565b810103126102595750613c4590611cb0565b38613c16565b503d613c29565b5050505061341f57600090565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580613d3f575b61341f578486116133f557613cdb829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613d0b575b50905015613b7a578290613d0157505090565b6113999103614091565b82813d8311613d38575b613d1f8183611458565b810103126102595750613d3190611cb0565b8038613cee565b503d613d15565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613d84575b5015613c8d565b908382813d8311613db2575b613d9a8183611458565b810103126102595750613dac90611cb0565b38613d7d565b503d613d90565b505050505061341f57600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613ec7575b61341f578385116133f557613e43829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613e93575b50905015613e6957816113999103614091565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613ec0575b613ea78183611458565b810103126102595750613eb990611cb0565b8038613e56565b503d613e9d565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613f0c575b5015613df5565b908382813d8311613f3a575b613f228183611458565b810103126102595750613f3490611cb0565b38613f05565b503d613f18565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580614017575b61341f578486116133f557613fbd829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613fe3575b50905015613e69578290613d0157505090565b82813d8311614010575b613ff78183611458565b81010312610259575061400990611cb0565b8038613fd0565b503d613fed565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa9081156126125760009161405c575b5015613f6f565b908382813d831161408a575b6140728183611458565b81010312610259575061408490611cb0565b38614055565b503d614068565b806140995750565b80471061416257600080808093335af13d1561415d573d6140b981611499565b906140c76040519283611458565b8152600060203d92013e5b156140d957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b6140d2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6000818152600360205267ffffffffffffffff908160408220541661423c577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600360205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600460205260408120908381528160205267ffffffffffffffff80604083205416614301577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b9061433590611c61565b60009283925b8051841015614390579361434f84866115c2565b519160005b835181101561437f5761436781856115c2565b5161437284876115c2565b5260019283019201614354565b50909460019094019390915061433b565b509250905090565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480614496575b15614400577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152614490816113e7565b51902090565b507f000000000000000000000000000000000000000000000000000000000000000046146143d7565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260018252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e085015261010090818501528352610120830196838810908811176113b8576145aa86956145be946145c6998b52519020614830565b918860ff8351169183015192015192614794565b9490946145fb565b51169116036145d25750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614765578061460c5750565b600181036146725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036146d85760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146146e157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116148245791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa1561481757815173ffffffffffffffffffffffffffffffffffffffff811615614811579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614838614398565b906040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526144908161139c565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600160205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff8711176113b85761492d85946145be936145c6988a52519020614830565b9060ff8151168860208301519201519261479456fea164736f6c6343000813000a\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<EAS> {\n    return super.deploy(registry, overrides || {}) as Promise<EAS>;\n  }\n  override getDeployTransaction(\n    registry: PromiseOrValue<string>,\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override attach(address: string): EAS {\n    return super.attach(address) as EAS;\n  }\n  override connect(signer: Signer): EAS__factory {\n    return super.connect(signer) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new utils.Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, signerOrProvider: Signer | Provider): EAS {\n    return new Contract(address, _abi, signerOrProvider) as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/unichain/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport { Signer, utils, Contract, ContractFactory, Overrides } from \"ethers\";\nimport type { Provider, TransactionRequest } from \"@ethersproject/providers\";\nimport type { PromiseOrValue } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323700000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000813000a\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override deploy(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): Promise<SchemaRegistry> {\n    return super.deploy(overrides || {}) as Promise<SchemaRegistry>;\n  }\n  override getDeployTransaction(\n    overrides?: Overrides & { from?: PromiseOrValue<string> }\n  ): TransactionRequest {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override attach(address: string): SchemaRegistry {\n    return super.attach(address) as SchemaRegistry;\n  }\n  override connect(signer: Signer): SchemaRegistry__factory {\n    return super.connect(signer) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new utils.Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    signerOrProvider: Signer | Provider\n  ): SchemaRegistry {\n    return new Contract(address, _abi, signerOrProvider) as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/zksync/.chainId",
    "content": "324\n"
  },
  {
    "path": "deployments/zksync/.migrations.json",
    "content": "{\n  \"000001-registry\": 1714515518,\n  \"000002-eas\": 1714515524,\n  \"000003-register-initial-schemas\": 1714515978,\n  \"000004-name-initial-schemas\": 1714516445,\n  \"000005-eip712-proxy\": 1714516451,\n  \"000006-indexer\": 1714516456\n}"
  },
  {
    "path": "deployments/zksync/EAS.json",
    "content": "{\n  \"address\": \"0x21d8d4eE83b80bc0Cc0f2B7df3117Cf212d02901\",\n  \"sourceName\": \"contracts/EAS.sol\",\n  \"contractName\": \"EAS\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"registry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevoked\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyRevokedOffchain\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyTimestamped\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InsufficientValue\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidExpirationTime\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidNonce\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRegistry\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidRevocations\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidVerifier\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"Irrevocable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotPayable\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WrongSchema\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Attested\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"oldNonce\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"NonceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Revoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"RevokedOffchain\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint64\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"name\": \"Timestamped\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct AttestationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttestation\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"time\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"expirationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"revocationTime\",\n              \"type\": \"uint64\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"refUID\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"recipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"data\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct Attestation\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getNonce\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"revoker\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getSchemaRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISchemaRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newNonce\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseNonce\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationValid\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiAttestationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttest\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"internalType\": \"struct MultiRevocationRequest[]\",\n          \"name\": \"multiRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiRevokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"data\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"multiTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct RevocationRequest\",\n          \"name\": \"request\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revoke\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"revokeOffchain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"data\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"timestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint64\",\n          \"name\": \"\",\n          \"type\": \"uint64\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"bytecode\": \"0x00040000000000020029000000000002000000000801034f0000000001080019000000600310027000000e24013001970003000000180355000200000008035500000e240030019d0000000102200190000000220000c13d0000012004000039000000400040043f000000040210008c0000004a0000413d000000000208043b000000e00220027000000e360320009c0000004c0000a13d00000e370320009c000001420000a13d00000e380320009c0000032e0000a13d00000e390320009c000003400000213d00000e3c0320009c000006830000613d00000e3d0120009c0000004a0000c13d0000000001000416000000000101004b0000004a0000c13d388b32ad0000040f000003730000013d0000000002000416000000000202004b0000004a0000c13d0000001f0210003900000e2502200197000001e002200039000000400020043f0000001f0210018f0000000503100272000000350000613d00000000040000190000000505400210000000000658034f000000000606043b000001e00550003900000000006504350000000104400039000000000534004b0000002d0000413d000000000402004b000000440000613d0000000503300210000000000438034f0000000302200210000001e003300039000000000503043300000000052501cf000000000525022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000230435000000200110008c0000004a0000413d000001e00100043d002000000001001d00000e260110009c000000810000a13d00000000010000190000388d0001043000000e480320009c000000950000213d00000e500320009c000001600000213d00000e540320009c0000044a0000613d00000e550320009c000003ca0000613d00000e560220009c0000004a0000c13d0000000002000416000000240310008c0000004a0000413d000000000202004b0000004a0000c13d0000000402800370000000000202043b00000e2b0320009c0000004a0000213d0000002303200039000000000313004b0000004a0000813d0000000403200039000000000338034f000000000303043b001c00000003001d00000e2b0330009c0000004a0000213d001b00240020003d0000001c0200002900000005022002100000001b02200029000000000112004b0000004a0000213d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b001a0e2b0010019b0000001c0100006b00000bf60000c13d000000400100043d0000001a02000029000006e70000013d000000400600043d00000e270160009c0000008f0000813d0000004001600039000000400010043f0000000301000039000000000316043600000e2802000041001e00000003001d0000000000230435000000400200043d001f00000002001d00000e290220009c0000037b0000a13d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e490320009c000002d70000213d00000e4d0320009c000004670000613d00000e4e0320009c000003d10000613d00000e4f0220009c0000004a0000c13d000000240210008c0000004a0000413d0000000402800370000000000202043b001e00000002001d00000e2b0220009c0000004a0000213d0000001e020000290000002302200039000000000212004b0000004a0000813d0000001e020000290000000402200039000000000228034f000000000202043b001d00000002001d00000e2b0220009c0000004a0000213d0000001e02000029000000240d2000390000001d0200002900000005022002100000000002d20019000000000112004b0000004a0000213d0000001d0100006b000004650000613d0000001d01000029001c000100100092000000000400041600000e570f000041002000000000001d001b0000000d001d000000200100002900000005011002100000000002d1001900000000010000310000001e0310006a000000630330008a000000020e00036700000000022e034f000000000202043b000000000532004b000000000500001900000000050f801900000e570330019700000e5706200197000000000736004b000000000700001900000000070f4019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000000006d20019000000200260003900000000022e034f00000000036100490000001f0330008a000000000202043b000000000532004b000000000500001900000000050f801900000e570330019700000e5707200197000000000837004b000000000800001900000000080f4019000000000337013f00000e570330009c000000000805c019000000000308004b0000004a0000c13d000000000262001900000000032e034f000000000803043b00000e2b0380009c0000004a0000213d000000060980021000000000039100490000002007200039000000000237004b000000000200001900000000020f201900000e570330019700000e5705700197000000000a35004b000000000a000019000000000a0f4019000000000335013f00000e570330009c000000000a02c01900000000020a004b0000004a0000c13d00000020030000290000001c0230006c00000000050000190000000105006039000000000300041100000005028002100000003f0220003900000e610a200197000000400200043d000000000aa20019000000000b2a004b000000000b000019000000010b00403900000e2b0ca0009c0000008f0000213d000000010bb001900000008f0000c13d0000004000a0043f00000000008204350000000008790019000000000918004b0000004a0000213d000000000978004b000001320000a13d0000000009020019000000000a710049000000400ba0008c000000000b000019000000000b0f401900000e570aa00197000000000c0a004b000000000c000019000000000c0f201900000e570aa0009c000000000c0bc019000000000a0c004b0000004a0000c13d000000400a00043d00000e290ba0009c0000008f0000213d0000002009900039000000400ba000390000004000b0043f000000000b7e034f000000000b0b043b000000000bba0436000000200c700039000000000cce034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000a87004b000001150000413d00000000016e034f000000000101043b001f00000004001d388b2ae90000040f0000001f04000029000000000214004b000011690000413d000000000414004900000020020000290000000102200039002000000002001d0000001d0120006c0000001b0d00002900000e570f000041000000be0000413d000004650000013d00000e410320009c000003210000213d00000e450320009c000006110000613d00000e460320009c000005cd0000613d00000e470220009c0000004a0000c13d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d388b139c0000040f00000004010000390000000202100367000000000202043b0000000000200435000000200010043f00000040020000390000000001000019388b384c0000040f388b13bc0000040f0000002002000039000000400300043d002000000003001d0000000002230436388b124a0000040f0000002004000029000008170000013d00000e510320009c000005a10000613d00000e520320009c000003e70000613d00000e530220009c0000004a0000c13d000000240210008c0000004a0000413d0000000402800370000000000202043b002000000002001d00000e2b0220009c0000004a0000213d000000200210006a00000e5703000041000000e40420008c0000000004000019000000000403401900000e5702200197000000000502004b000000000300a01900000e570220009c000000000304c019000000000203004b0000004a0000c13d00000020020000290000000404200039000001c002000039000000400020043f0000002003400039000000000338034f001f00000004001d000000000448034f000000000404043b001e00000004001d000001200040043f000000000303043b00000e2b0430009c0000004a0000213d0000001f05300029000000000351004900000e5704000041000000c00630008c0000000006000019000000000604401900000e5703300197000000000703004b000000000400a01900000e570330009c000000000406c019000000000304004b0000004a0000c13d0000028003000039000000400030043f000000000458034f000000000404043b00000e260640009c0000004a0000213d000001c00040043f0000002004500039000000000648034f000000000606043b00000e2b0760009c0000004a0000213d000001e00060043f0000002004400039000000000648034f000000000606043b000000000706004b0000000007000019000000010700c039000000000776004b0000004a0000c13d000002000060043f0000002006400039000000000668034f000000000606043b000002200060043f0000004004400039000000000648034f000000000606043b00000e2b0760009c0000004a0000213d00000000065600190000001f05600039000000000515004b0000004a0000813d000000000c08034f000000000568034f000000000505043b00000e2b0750009c0000008f0000213d0000001f07500039001d0020000000920000001d0770017f0000003f077000390000001d0770017f00000e760870009c0000008f0000213d0000028007700039000000400070043f000002800050043f00000020066000390000000007650019000000000717004b00000000070c034f0000004a0000213d000000000667034f0000001f0750018f0000000508500272000001d80000613d0000000009000019000000050a900210000000000ba6034f000000000b0b043b000002a00aa000390000000000ba04350000000109900039000000000a89004b000001d00000413d000000000907004b000001e70000613d0000000508800210000000000686034f0000000307700210000002a008800039000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f000000000068043500000020060000290000004406600039000000000161004900000e5707000041000000600810008c0000000008000019000000000807401900000e5701100197000000000901004b000000000700a01900000e570110009c000000000708c019000002a0015000390000000000010435000002400030043f000000200140003900000000030c034f000000000113034f000000000101043b000002600010043f000001400020043f000000000107004b0000004a0000c13d000000400100043d00000e640210009c0000008f0000213d0000006002100039000000400020043f00000000026c034f000000000202043b000000ff0320008c0000004a0000213d0000000002210436000000200360003900000000033c034f000000000303043b0000000000320435000000400260003900000000022c034f000000000202043b00000040031000390000000000230435000001600010043f000000600160003900000000021c034f000000000202043b00000e260320009c0000004a0000213d000001800020043f001c00200010003d0000001c01c00360000000000101043b00000e2b0210009c0000004a0000213d000001a00010043f0000012001000039388b335e0000040f000000400200043d00000e290120009c0000008f0000213d0000004001200039000000400010043f00000001010000390000000001120436000000400300043d00000e310430009c0000008f0000213d000000c004300039000000400040043f000000800430003900000060050000390000000000540435000000a0043000390000000000040435000000600430003900000000000404350000004004300039000000000004043500000020043000390000000000040435000000000003043500000000003104350000000005000031000000200350006a000000c30730008a0000001c03000029000000a00430008a0000000203000367000000000443034f000000000604043b00000e5704000041000000000876004b0000000008000019000000000804801900000e570770019700000e5709600197000000000a79004b000000000a000019000000000a044019000000000779013f00000e570770009c000000000a08c01900000000070a004b0000004a0000c13d0000001f076000290000000006750049000000c00860008c0000000008000019000000000804401900000e5706600197000000000906004b000000000400a01900000e570660009c000000000408c019000000000404004b0000004a0000c13d000000400400043d00000e310640009c0000008f0000213d000000c006400039000000400060043f000000000673034f000000000606043b00000e260860009c0000004a0000213d00000000086404360000002006700039000000000963034f000000000909043b00000e2b0a90009c0000004a0000213d00000000009804350000002006600039000000000863034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004a0000c13d000000400940003900000000008904350000002008600039000000000883034f000000000808043b000000600940003900000000008904350000004006600039000000000863034f000000000808043b00000e2b0980009c0000004a0000213d000000000a7800190000001f07a0003900000e5708000041000000000957004b0000000009000019000000000908801900000e570770019700000e570b500197000000000cb7004b00000000080080190000000007b7013f00000e570770009c000000000809c019000000000708004b0000004a0000c13d0000000007a3034f000000000707043b00000e2b0870009c0000008f0000213d0000001f087000390000001d0880017f0000003f088000390000001d0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b00403900000e2b0c90009c0000008f0000213d000000010bb001900000008f0000c13d000000400090043f0000000009780436000000200aa00039000000000ba7001900000000055b004b0000004a0000213d000000000aa3034f0000001f0570018f000000050b700272000002b20000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000002aa0000413d000000000c05004b000002c10000613d000000050bb00210000000000aba034f000000000bb900190000000305500210000000000c0b0433000000000c5c01cf000000000c5c022f000000000a0a043b0000010005500089000000000a5a022f00000000055a01cf0000000005c5019f00000000005b043500000000057900190000000000050435000000800540003900000000008504350000002005600039000000000553034f000000000505043b000000a00640003900000000005604350000000005020433000000000505004b000002d10000613d00000000004104350000000001020433000000000101004b000012050000c13d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e4a0320009c000005b80000613d00000e4b0320009c000003fa0000613d00000e4c0220009c0000004a0000c13d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b002000000001001d0000000001000411001f00000001001d00000000001004350000000301000039001e00000001001d000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b000000000201041a000000200120006b000007b90000a13d001d00000002001d0000001f0100002900000000001004350000001e01000029000000200010043f00000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b0000002003000029000000000031041b000000400100043d000000200210003900000000003204350000001d020000290000000000210435000000000200041400000e240320009c00000e2404000041000000000204801900000e240310009c00000000010480190000004001100210000000c002200210000000000112019f00000e5c011001c70000800d02000039000000010300003900000e7404000041388b38810000040f00000001012001900000004a0000613d000004650000013d00000e420320009c000006460000613d00000e430320009c000005f80000613d00000e440120009c0000004a0000c13d0000000001000416000000000101004b0000004a0000c13d00000e6001000041000001200010043f00000e5a010000410000388c0001042e00000e3e0320009c000006d10000613d00000e3f0320009c000006bf0000613d00000e400220009c0000004a0000c13d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b388b143d0000040f000000000101004b0000000001000019000000010100c039000003730000013d00000e3a0320009c000006ae0000613d00000e3b0220009c0000004a0000c13d000000240210008c0000004a0000413d0000000402800370000000000202043b002000000002001d00000e2b0220009c0000004a0000213d000000200110006a00000e5702000041000000440310008c0000000003000019000000000302401900000e5701100197000000000401004b000000000200a01900000e570110009c000000000203c019000000000102004b0000004a0000c13d388b129f0000040f001f00000001001d001d00000000003500000020020000290000000401200039001e00000001001d0000002402200039388b12bf0000040f0000001d02000029388b12de0000040f002000000001001d0000001f01000029388b12d40000040f000000200200002900000000002104350000001f01000029388b12d40000040f0000001e010000290000000201100367000000000101043b000000000300041100000000040004160000001f02000029388b14520000040f00000020011000390000000001010433388b12d40000040f0000000001010433000000400200043d000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e58011001c70000388c0001042e0000001f070000290000004002700039000000400020043f0000000502000039000000000327043600000e2a0200004100000000002304350000000102000039001d00000002001d000000800020043f000000a00010043f000000c00000043f0000000004060433000000200140008c001c00000003001d000006ee0000413d001b00000004001d00000e2b0140009c0000008f0000213d000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b0000070b0000c13d001a00000006001d000000200130008c000003b60000413d001900000003001d000000000000043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000201043b0000001b010000290000001f011000390000000501100270000000000112001900000019030000290000001f0330003900000005033002700000000002320019000000000321004b000003b60000813d000000000001041b0000000101100039000000000321004b000003b20000413d000000000000043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000200200008a0000001b080000290000000003280170000000000101043b0000082b0000c13d00000020020000390000001a060000290000001f07000029000008370000013d0000000001000416000000000101004b0000004a0000c13d00000e6501000041000001200010043f00000e5a010000410000388c0001042e000000640110008c0000004a0000413d388b13650000040f002000000001001d0000000001000031388b137c0000040f001f00000001001d0000002001000029388b12d40000040f0000001f0200002900000000002104350000002001000029388b12d40000040f00000004010000390000000201100367000000000101043b000000000300041100000000040004160000002002000029388b24460000040f00000000010000190000388c0001042e0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b00000e260210009c0000004a0000213d00000000001004350000000301000039000000200010043f00000040020000390000000001000019388b384c0000040f000000000101041a000001200010043f00000e5a010000410000388c0001042e0000000001000416000000000101004b0000004a0000c13d0000000001000412002000000001001d002800000001001d002700000000001d0000800501000039001f00000001001d0000004403000039001e00000003001d0000000004000415000000280440008a000000050440021000000e5902000041388b38620000040f388b325a0000040f002600200000002d002500200000003d001d00000001001d0000000004000415000000260440008a00000005044002100000001f0100002900000e59020000410000001e03000029388b38620000040f388b325a0000040f002400200000002d002300400000003d001c00000001001d0000000004000415000000240440008a00000005044002100000001f0100002900000e59020000410000001e03000029388b38620000040f388b325a0000040f0000001d0200002900000020042000390000000003020433001f00000003001d001d00000001001d000000400100043d002000000001001d00000020021000390000000001040019388b120e0000040f00000e75030000410000001f020000290000002004200029001b00000004001d000000200140003900000000003104350000001c0200002900000020012000390000000003020433001e00000003001d0000002102400039388b120e0000040f0000001b020000290000001e01200029000000210210003900000e7503000041000000000032043500000022021000390000001d0300002900000020013000390000000003030433001d00000003001d388b120e0000040f0000001e020000290000001f012000290000001d0310002900000002023000390000002001000029000000000021043500000022023000390000080f0000013d000000240210008c0000004a0000413d0000000402800370000000000202043b000d00000002001d00000e2b0220009c0000004a0000213d0000000d020000290000002302200039000000000212004b0000004a0000813d0000000d020000290000000402200039000000000228034f000000000202043b000c00000002001d00000e2b0220009c0000004a0000213d0000000d02000029000e00240020003d0000000c0200002900000005022002100000000e02200029000000000112004b0000004a0000213d0000000c0100006b000008480000c13d00000000010000190000388c0001042e000000240210008c0000004a0000413d0000000402800370000000000202043b001600000002001d00000e2b0220009c0000004a0000213d00000016020000290000002302200039000000000212004b0000004a0000813d00000016020000290000000402200039000000000228034f000000000202043b001500000002001d00000e2b0220009c0000004a0000213d0000001602000029001b00240020003d000000150200002900000005052002100000001b03500029000000000113004b0000004a0000213d0000003f0150003900000e610110019700000e620310009c0000008f0000213d0000012001100039000000400010043f0000001501000029000001200010043f000000000101004b0000000002000019000005f10000613d00000060010000390000000003000019000001400430003900000000001404350000002003300039000000000453004b0000048d0000413d0000000001000416001f00000001001d0000001501000029001400010010009200000000050000190000000002000019001900000002001d0000000001000031000000160210006a000000630320008a001c00000005001d0000000504500210001a00000004001d0000001b024000290000000204000367000000000224034f000000000202043b000000000532004b00000e57080000410000000005000019000000000508801900000e570330019700000e5706200197000000000736004b00000000070000190000000007084019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000001b032000290000002002300039000000000224034f001d00000003001d00000000033100490000001f0330008a000000000202043b000000000532004b0000000005000019000000000508801900000e570330019700000e5706200197000000000736004b00000000070000190000000007084019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000001d02200029000000000324034f000000000803043b00000e2b0380009c0000004a0000213d000000050680021000000000036100490000002005200039000000000235004b00000e57070000410000000002000019000000000207201900000e5703300197002000000005001d00000e5705500197000000000935004b00000000090000190000000009074019000000000335013f00000e570330009c000000000902c019000000000209004b0000004a0000c13d000000000208004b000011df0000613d0000001c03000029000000140230006c00000000020000190000000102006039001800000002001d0000000002000411001700000002001d0000003f0260003900000e6103200197000000400200043d0000000003320019001e00000002001d000000000523004b0000000005000019000000010500403900000e2b0930009c0000008f0000213d00000001055001900000008f0000c13d000000400030043f0000001e0200002900000000008204350000002002600029000000000312004b0000004a0000213d000000200320006c000005830000a13d0000001e09000029000000200a0000290000050a0000013d00000020099000390000000003df001900000000000304350000008003b000390000000000e304350000002003c00039000000000334034f000000000303043b000000a005b0003900000000003504350000000000b90435000000200aa0003900000000032a004b000005830000813d0000000003a4034f000000000303043b00000e2b0530009c0000004a0000213d000000200d3000290000000003d10049000000c00530008c00000e57070000410000000005000019000000000507401900000e5703300197000000000603004b0000000006000019000000000607201900000e570330009c000000000605c019000000000306004b0000004a0000c13d000000400b00043d00000e3103b0009c0000008f0000213d000000c003b00039000000400030043f0000000003d4034f000000000303043b00000e260530009c0000004a0000213d00000000053b04360000002003d00039000000000634034f000000000606043b00000e2b0c60009c0000004a0000213d00000000006504350000002005300039000000000354034f000000000303043b000000000603004b0000000006000019000000010600c039000000000663004b0000004a0000c13d0000004006b0003900000000003604350000002003500039000000000334034f000000000303043b0000006006b000390000000000360435000000400c5000390000000003c4034f000000000303043b00000e2b0530009c0000004a0000213d0000000006d300190000001f03600039000000000513004b0000000005000019000000000507801900000e570330019700000e570d100197000000000ed3004b000000000e000019000000000e0740190000000003d3013f00000e570330009c000000000e05c01900000000030e004b0000004a0000c13d000000000364034f000000000d03043b00000e2b03d0009c0000008f0000213d0000001f03d00039000000200500008a000000000353016f0000003f03300039000000000353016f000000400e00043d00000000033e00190000000005e3004b0000000005000019000000010500403900000e2b0f30009c0000008f0000213d00000001055001900000008f0000c13d000000400030043f000000000fde0436000000200360003900000000053d0019000000000515004b0000004a0000213d000000000634034f0000000505d00272000005730000613d0000000003000019000000050730021000000000087f0019000000000776034f000000000707043b00000000007804350000000103300039000000000753004b0000056b0000413d0000001f03d00190000004fc0000613d0000000505500210000000000656034f00000000055f00190000000303300210000000000705043300000000073701cf000000000737022f000000000606043b0000010003300089000000000636022f00000000033601cf000000000373019f0000000000350435000004fc0000013d0000001d01400360000000000101043b0000001e0200002900000017030000290000001f04000029001f00000004001d0000001805000029388b1c390000040f00000000120104340000001f0320006b000011690000413d000001200300043d0000001c05000029000000000353004b000002d10000a13d00000000030104330000001a0400002900000140044000390000000000340435000001200300043d000000000353004b000002d10000a13d001f001f002000710000000001010433000000000101043300000019021000290000000105500039000000150150006c000004980000413d000005f10000013d0000000001000416000000000101004b0000004a0000c13d0000000203000039000000000203041a000000010420019000000001052002700000007f0150018f000000000105c0190000001f0510008c00000000050000190000000105002039000000000552013f00000001055001900000070b0000c13d000001200010043f000000000404004b000007b20000613d0000000000300435000000000201004b000008010000c13d00000140010000390000080c0000013d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000800b0100003900000004030000390000000004000415000000290440008a000000050440021000000e5b020000410020000000080353388b38620000040f000000200200035f0000000402200370000000000302043b00000e2b02100197002000000002001d0000000001030019388b31940000040f000006e50000013d000000240210008c0000004a0000413d0000000402800370000000000202043b000300000002001d00000e2b0220009c0000004a0000213d00000003020000290000002302200039000000000212004b0000004a0000813d00000003020000290000000402200039000000000228034f000000000202043b000200000002001d00000e2b0220009c0000004a0000213d0000000302000029000700240020003d000000020200002900000005052002100000000703500029000000000113004b0000004a0000213d0000003f0150003900000e610110019700000e620310009c0000008f0000213d0000012001100039000000400010043f0000000201000029000001200010043f000000000101004b000000000200001900000c350000c13d0000012001000039388b32080000040f0000000002010019000000400100043d002000000001001d388b122e0000040f0000015e0000013d0000000002000416000000440110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b00000e260210009c0000004a0000213d00000000001004350000000601000039000000200010043f0000004002000039001f00000002001d00000000010000190020000000080353388b384c0000040f000000200200035f0000002402200370000000000202043b0000000000200435000000200010043f00000000010000190000001f02000029000006cb0000013d0000000001000416000000000101004b0000004a0000c13d002000000004001d00000e590100004100000000001004390000000001000412001f00000001001d00000004001004430000010001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000400700043d000000000101043b000000ff0210008c000007c20000c13d000000000300041a000000010430019000000001023002700000007f0120018f000000000102c0190000001f0210008c00000000020000190000000102002039000000000223013f00000001022001900000070b0000c13d0000000002170436000000000404004b00000b990000613d0000000000000435000000000301004b000000000300001900000b9f0000613d00000e6f0400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000513004b0000063e0000413d00000b9f0000013d000001040110008c0000004a0000413d0000000401800370000000000101043b002000000001001d000001200010043f0000002401800370000000000101043b000001c00010043f0000004401800370000000000101043b000001e00010043f000001c001000039000001400010043f0000026001000039000000400010043f0000006401800370000000000101043b000000ff0210008c0000004a0000213d000002000010043f0000008401800370000000000101043b000002200010043f000000a401800370000000000101043b000002400010043f0000020001000039000001600010043f000000c401800370000000000101043b001f00000001001d00000e260110009c0000004a0000213d0000001f01000029000001800010043f000000e401800370000000000101043b00000e2b0210009c0000004a0000213d000001a00010043f0000012001000039388b35f00000040f388b13650000040f001e00000001001d0000000001000031388b137c0000040f001d00000001001d0000001e01000029388b12d40000040f0000001d0200002900000000002104350000001e01000029388b12d40000040f000000000400041600000020010000290000001e020000290000001f03000029388b24460000040f00000000010000190000388c0001042e0000000002000416000000240310008c0000004a0000413d000000000202004b0000004a0000c13d0000000402800370000000000202043b00000e2b0320009c0000004a0000213d0000002303200039000000000313004b0000004a0000813d0000000403200039000000000338034f000000000303043b001e00000003001d00000e2b0330009c0000004a0000213d001d00240020003d0000001e0200002900000005022002100000001d02200029000000000112004b0000004a0000213d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b001c0e2b0010019b0000001e0100006b000010e00000c13d000000400100043d0000001c02000029000006e70000013d0000000001000416000000000101004b0000004a0000c13d0000000001000412002200000001001d002101400000003d000080050100003900000044030000390000000004000415000000220440008a000000050440021000000e5902000041388b38620000040f00000e2601100197000001200010043f00000e5a010000410000388c0001042e0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b00000000001004350000000501000039000000200010043f00000040020000390000000001000019388b384c0000040f000000000101041a00000e2b01100197000001200010043f00000e5a010000410000388c0001042e0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000800b0100003900000004030000390000000004000415000000290440008a000000050440021000000e5b020000410020000000080353388b38620000040f000000200200035f0000000402200370000000000202043b00000e2b03100197002000000003001d0000000001000411388b31c60000040f000000400100043d0000002002000029000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e58011001c70000388c0001042e00000003014002100000010001100089000000010200008a00000000011201cf000000000204004b00000000010060190000001e020000290000000002020433000000000112016f000000000141019f000001800010043f0000000004070433000000200140008c000007110000413d001b00000004001d00000e2b0140009c0000008f0000213d0000001d01000029000000000101041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000007cd0000613d00000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d0001043000000003014002100000010001100089000000010200008a00000000011201cf000000000204004b00000000010060190000000002030433000000000112016f000000000141019f000001a00010043f00000e24040000410000001e0200002900000e240120009c000000000104001900000000010240190000004001100210001a00000006001d000000000206043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b001d00000001001d000001400010043f0000001c0200002900000e240120009c00000e2404000041000000000204801900000040012002100000001f02000029000000000202043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b001f00000001001d000001600010043f00000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000201043b000001000020043f000000400100043d0000008003100039000000000023043500000060021000390000001f03000029000000000032043500000040021000390000001d030000290000000000320435000000a002000039001d00000002001d0000000002210436000000a0031000390000000004000410001f00000004001d000000000043043500000e3003000041000000000032043500000e310310009c0000008f0000213d000000c003100039000000400030043f00000e240300004100000e240420009c00000000020380190000004002200210000000000101043300000e240410009c00000000010380190000006001100210000000000121019f000000000200041400000e240420009c0000000002038019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b000000e00010043f0000001f02000029000001200020043f0000001a02000029000000000302043300000e2b0230009c0000008f0000213d0000000202000039000000000502041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f00000001055001900000070b0000c13d000000200540008c000007a90000413d0000001f05300039000000050550027000000e320650004100000e3205000041000000200730008c000000000506801900000000002004350000001f04400039000000050440027000000e3204400041000000000645004b000007a90000813d000000000005041b0000000105500039000000000645004b000007a50000413d0000001f0430008c0000116f0000a13d0000000000200435000000200400008a00000000064301700000117f0000c13d000000200500003900000e32040000410000118b0000013d000001000300008a000000000232016f000001400020043f000000000101004b000001600100003900000140010060390000080c0000013d000000400100043d00000e7302000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d00010430000000ff0210018f000000200320008c000008210000413d00000e6e01000041000000000017043500000e240100004100000e240270009c0000000007018019000000400170021000000e35011001c70000388d00010430001a00000006001d000000200130008c000007ec0000413d001900000003001d0000001d01000029000000000010043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000201043b0000001b010000290000001f011000390000000501100270000000000112001900000019030000290000001f0330003900000005033002700000000002320019000000000321004b000007ec0000813d000000000001041b0000000101100039000000000321004b000007e80000413d0000001d01000029000000000010043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000200200008a0000001b080000290000000003280170000000000101043b00000bd90000c13d00000020020000390000001a060000290000001f0700002900000be50000013d00000e320200004100000000040000190000000003040019000000000402041a0000014005300039000000000045043500000001022000390000002004300039000000000514004b000008030000413d0000016001300039000001200210008a0000012001000039002000000001001d388b128c0000040f0000002001000039000000400200043d001f00000002001d00000000021204360000002001000029388b121b0000040f0000001f04000029000000000141004900000e240200004100000e240310009c000000000102801900000e240340009c000000000402801900000040024002100000006001100210000000000121019f0000388c0001042e001e00000007001d00000e290370009c0000008f0000213d0000001e040000290000004003400039000000400030043f00000020034000390000000000130435000000000024043500000bac0000013d000000200200003900000000040000190000001a060000290000001f0700002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b0000082f0000413d000000000383004b000008420000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f00000000026200190000000002020433000000000232016f000000000021041b000000010180021000000001011001bf000000000010041b000000ff010000390000001c03000029000006f80000013d0000000001000416001000000001001d0000000c01000029000b00010010009200000e240e000041000f00000000001d0000000f0100002900000005011002100000000e0310002900000000020000310000000d0120006a000000c30410008a0000000201000367000000000331034f000000000303043b000000000543004b00000e57080000410000000005000019000000000508801900000e570440019700000e5706300197000000000746004b00000000070000190000000007084019000000000446013f00000e570440009c000000000705c019000000000407004b0000004a0000c13d0000000e033000290000000004320049000000a00540008c00000e57070000410000000005000019000000000507401900000e5704400197000000000604004b0000000006000019000000000607201900000e570440009c000000000605c019000000000406004b0000004a0000c13d000000400400043d001600000004001d00000e630440009c0000008f0000213d0000001605000029000000a004500039000000400040043f000000000431034f000000000404043b00000000044504360000002005300039000000000651034f000000000606043b00000e2b0760009c0000004a0000213d00000000073600190000001f06700039000000000826004b00000e570b000041000000000800001900000000080b801900000e570660019700000e5709200197000000000a96004b000000000a000019000000000a0b4019000000000696013f00000e570660009c000000000a08c01900000000060a004b0000004a0000c13d000000000671034f000000000806043b00000e2b0680009c0000008f0000213d00000005068002100000003f0660003900000e6109600197000000400600043d0000000009960019000000000a69004b000000000a000019000000010a00403900000e2b0b90009c0000008f0000213d000000010aa001900000008f0000c13d0000002007700039000000400090043f000000000086043500000006088002100000000008780019000000000928004b0000004a0000213d000000000978004b000008ca0000a13d0000000009060019000000000a720049000000400ba0008c00000e570d000041000000000b000019000000000b0d401900000e570aa00197000000000c0a004b000000000c000019000000000c0d201900000e570aa0009c000000000c0bc019000000000a0c004b0000004a0000c13d000000400a00043d00000e290ba0009c0000008f0000213d0000002009900039000000400ba000390000004000b0043f000000000b71034f000000000b0b043b000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000a87004b000008ac0000413d00000000006404350000002005500039000000000551034f000000000505043b00000e2b0650009c0000004a0000213d00000000063500190000001f05600039000000000725004b00000e570a000041000000000700001900000000070a801900000e570550019700000e5708200197000000000985004b000000000900001900000000090a4019000000000585013f00000e570550009c000000000907c019000000000509004b0000004a0000c13d000000000561034f000000000705043b00000e2b0570009c0000008f0000213d00000005057002100000003f0550003900000e6108500197000000400500043d0000000008850019000000000958004b0000000009000019000000010900403900000e2b0a80009c0000008f0000213d00000001099001900000008f0000c13d000000400080043f0000000000750435000000200660003900000060877000c90000000007670019000000000827004b0000004a0000213d000000000876004b0000091f0000813d00000000080500190000000009620049000000600a90008c00000e570c000041000000000a000019000000000a0c401900000e5709900197000000000b09004b000000000b000019000000000b0c201900000e570990009c000000000b0ac01900000000090b004b0000004a0000c13d000000400900043d00000e640a90009c0000008f0000213d000000600a9000390000004000a0043f000000000a61034f000000000a0a043b000000ff0ba0008c0000004a0000213d0000002008800039000000000aa90436000000200b600039000000000bb1034f000000000b0b043b0000000000ba0435000000400a600039000000000aa1034f000000000a0a043b000000400b9000390000000000ab043500000000009804350000006006600039000000000976004b000008fa0000413d00000016020000290000004002200039001400000002001d00000000005204350000006002300039000000000321034f000000000303043b00000e260630009c0000004a0000213d00000016060000290000006006600039001500000006001d00000000003604350000002002200039000000000121034f000000000101043b00000e2b0210009c0000004a0000213d00000016020000290000008002200039001300000002001d000000000012043500000000060404330000000002060433000000000102004b000011df0000613d0000000001050433000000000112004b000011df0000c13d0000000004000019001200000006001d001100000002001d0000000001060433000000000141004b000002d10000a13d000000140100002900000000030104330000000001030433000000000141004b000002d10000a13d00000016010000290000000001010433001900000004001d00000005024002100000002004200039000000000264001900000000020204330000001305000029000000000505043300000e2b07500197000000400600043d00000e630560009c0000008f0000213d0000000003430019000000000303043300000015040000290000000004040433000000a005600039000000400050043f00000e26044001970000006005600039001e00000005001d0000000000450435000000400460003900000000003404350000002003600039000000000023043500000000001604350000008001600039002000000001001d0000000000710435000000000107004b0000097f0000613d001b00000003001d001c00000004001d001d00000007001d001f00000006001d00000e5b010000410000000000100439000000000100041400000e240210009c00000000010e8019000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e2b011001970000001d0110006b00000e240e0000410000001f060000290000001c040000290000001b030000290000117c0000413d0000000001060433001f00000001001d0000000001040433001a00000001001d00000000010304330000000012010434001c00000002001d0000000001010433001b00000001001d0000001e01000029000000000101043300000e2601100197001d00000001001d00000000001004350000000301000039000000200010043f000000000100041400000e240210009c00000000010e8019000000c00110021000000e5c011001c70000801002000039388b38860000040f00000e240500004100000001022001900000004a0000613d000000000101043b000000000201041a000000010300008a000000000332004b000011690000613d0000000103200039000000000031041b0000002001000029000000000101043300000e2b03100197000000400100043d000000e0041000390000000000340435000000c0031000390000000000230435000000a0021000390000001b03000029000000000032043500000080021000390000001c03000029000000000032043500000060021000390000001f03000029000000000032043500000040021000390000001d030000290000000000320435000000e002000039001c00000002001d000000000221043600000e6003000041000000000032043500000e7c0310009c0000008f0000213d0000010003100039000000400030043f00000e240320009c00000000020580190000004002200210000000000101043300000e240310009c00000000010580190000006001100210000000000121019f000000000200041400000e240320009c0000000002058019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000e240300004100000001022001900000004a0000613d000000000101043b001d00000001001d00000e590100004100000000001004390000000001000412001f00000001001d0000000400100443000000a001000039001b00000001001d0000002400100443000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e26011001970000000002000410001800000002001d000000000112004b00000a190000c13d00000e590100004100000000001004390000001f01000029000000040010044300000080010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b002000000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b000000200110006c00000a190000c13d00000e590100004100000000001004390000001f01000029000000040010044300000060010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d00000e240400004100000a730000013d000000400100043d002000000001001d000000200210003900000e3001000041001700000002001d000000000012043500000e590100004100000000001004390000001f010000290000000400100443000000c0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000020020000290000004002200039000000000012043500000e590100004100000000001004390000001f0100002900000004001004430000001c010000290000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000020020000290000006002200039000000000012043500000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000002004000029000000a00240003900000018030000290000000000320435000000800240003900000000001204350000001b01000029000000000014043500000e310140009c00000e24040000410000008f0000213d0000002002000029000000c001200039000000400010043f000000170300002900000e240130009c00000000030480190000004001300210000000000202043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000e240400004100000001022001900000004a0000613d000000000101043b000000400200043d00000022032000390000001d05000029000000000053043500000e6803000041000000000032043500000002032000390000000000130435000000000100041400000e240310009c000000000104801900000e240320009c00000000020480190000004002200210000000c001100210000000000112019f00000e69011001c70000801002000039388b38860000040f00000e240e00004100000001022001900000004a0000613d000000000601043b0000001e0100002900000000080104330000001a0300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c0000008f0000213d0000008001700039000000400010043f0000000004070433000000410440008c00000af10000c13d000000000303043300000e6b0430009c00000af10000213d001e00000008001d002000000002001d0000000002050433001f00000009001d0000000004090433001d00000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435001c00000007001d000000a003700039000000f80220027000000000002304350000000000000435000000000200041400000e240320009c00000000020e801900000e240310009c00000000010e80190000004001100210000000c002200210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c00000000050300190000002005008039000000050450027200000ad30000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000acc0000413d0000001f0550019000000ae10000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f0003000000010355000000010220019000000e240e00004100000020020000290000001f090000290000001e04000029000011cf0000613d000000000100043300000e26031001980000001d060000290000001c0700002900000af10000613d000000000141013f00000e260110019800000b7d0000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b00000b080000613d000000000500001900000000064500190000000007950019000000000707043300000000007604350000002005500039000000000635004b00000b010000413d000000000443001900000000000404350000001f03300039000000200600008a000000000363016f00000064043000390000000000480435000000a303300039000000000463016f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c0000008f0000213d00000001044001900000008f0000c13d000000400030043f00000000030804330000000005000414000000040420008c00000b510000c13d00000001020000390000000104000031000000000104004b00000b670000613d00000e2b0140009c0000008f0000213d0000001f01400039000000000161016f0000003f01100039000000000161016f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c0000008f0000213d00000001055001900000008f0000c13d000000400010043f00000000014304360000000305000367000000050640027200000b3f0000613d000000000700001900000005087002100000000009810019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000b370000413d0000001f0440019000000b4e0000613d0000000506600210000000000565034f00000000066100190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f0000000000460435000000000202004b00000b6b0000c13d000011100000013d00000e240410009c00000000010e8019000000400110021000000e240430009c00000000030e80190000006003300210000000000113019f00000e240350009c00000000050e8019000000c003500210000000000131019f002000000006001d388b38860000040f000000200600002900000e240e000041000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b00000b220000c13d00000060030000390000008001000039000000000202004b000011100000613d0000000002030433000000200320008c000011100000413d000000200320008c00000e57050000410000000003000019000000000305401900000e5702200197000000000402004b0000000004000019000000000405201900000e570220009c000000000403c019000000000204004b0000004a0000c13d000000000101043300000e6d0110009c000011100000c13d00000019040000290000000104400039000000110140006c00000012060000290000093f0000413d0000000f020000290000000b0120006c00000000050000190000000105006039000000160100002900000000010104330000001502000029000000000202043300000e260320019700000000020600190000001004000029001000000004001d388b2ae90000040f00000e240e000041000000100210006b000011690000413d00100010001000710000000f020000290000000102200039000f00000002001d0000000c0120006c0000084e0000413d000004650000013d000001000400008a000000000343016f0000000000320435000000000101004b000000200300003900000000030060190000003f01300039000000200200008a000000000221016f001e00000007001d0000000001720019000000000221004b0000000002000019000000010200403900000e2b0310009c0000008f0000213d00000001022001900000008f0000c13d000000400010043f00000e590100004100000000001004390000001f0100002900000004001004430000002001000029000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000400700043d000000000101043b000000ff0210008c000010d20000c13d0000000104000039000000000304041a000000010630019000000001013002700000007f0510018f00000000010560190000001f0210008c00000000020000190000000102002039000000000223013f00000001022001900000001e020000290000070b0000c13d001e00000002001d002000000007001d0000000002170436000000000606004b000011160000c13d000001000100008a000000000113016f0000000000120435000000000105004b00000020030000390000000003006019000011230000013d000000200200003900000000040000190000001a060000290000001f0700002900000000057200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00000bdd0000413d000000000383004b00000bf00000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f00000000027200190000000002020433000000000232016f000000000021041b000000010180021000000001011001bf0000001d02000029000000000012041b000000ff010000390000071a0000013d0000000001000411001e0e260010019b001900060000003d001f80100000003d0000000002000019001d00000002001d00000005012002100000001b011000290000000201100367000000000101043b002000000001001d0000001e0100002900000000001004350000001901000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000001f02000029388b38860000040f00000001022001900000004a0000613d000000000101043b00000020020000290000000000200435000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000001f02000029388b38860000040f00000001022001900000004a0000613d0000002006000029000000000101043b000000000201041a00000e2b03200198000011660000c13d00000e5e022001970000001a07000029000000000272019f000000000021041b000000000100041400000e240210009c00000e2401008041000000c00110021000000e2d011001c70000800d02000039000000040300003900000e7a040000410000001e05000029388b38810000040f00000001012001900000004a0000613d0000001d0200002900000001022000390000001c0120006c00000bfb0000413d0000007e0000013d00000060040000390000000001000019000001400310003900000000004304350000002001100039000000000351004b00000c370000413d000b00000004001d0000000001000416000900000001001d0000000201000029000100010010009200000000020000190000000003000019000400000002001d0000000002000031000000030120006a000000c30410008a000a00000003001d0000000503300210000500000003001d00000007033000290000000201000367000000000331034f000000000303043b000000000543004b00000e57080000410000000005000019000000000508801900000e570440019700000e5706300197000000000746004b00000000070000190000000007084019000000000446013f00000e570440009c000000000705c019000000000407004b0000004a0000c13d00000007063000290000002004600039000000000341034f000000000503043b001d00000006001d00000000036200490000001f0330008a00000e570630019700000e5707500197000000000867004b00000e570900004100000000080000190000000008094019000000000667013f000000000735004b0000000007000019000000000709801900000e570660009c000000000807c019000000000608004b0000004a0000c13d000e001d0050002d0000000e05100360000000000505043b001000000005001d00000e2b0550009c0000004a0000213d00000010050000290008000500500218000000080520006a0000000e060000290000002007600039000000000657004b0000000006000019000000000609201900000e5705500197001a00000007001d00000e5707700197000000000857004b00000000080000190000000008094019000000000557013f00000e570550009c000000000806c019000000000508004b0000004a0000c13d000000100500006b000011df0000613d000f00200040003d0000000f04100360000000000404043b000000000534004b00000e57080000410000000005000019000000000508801900000e570330019700000e5706400197000000000736004b00000000070000190000000007084019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000001d04400029000000000341034f000000000303043b00000e2b0530009c0000004a0000213d000d0060000000920000000d653000b900000000022500190000002004400039000000000524004b00000e57070000410000000005000019000000000507201900000e570220019700000e5704400197000000000624004b00000000060000190000000006074019000000000224013f00000e570220009c000000000605c019000000000206004b0000004a0000c13d000000100230006b000011df0000c13d0000000f020000290000004002200039000000000121034f000000000101043b001100000001001d00000e2b0110009c0000004a0000213d0000001d01000029000600600010003d0000000f01000029000c00200010003d0000000002000019002000000002001d00000005012002100000001a0310002900000000020000310000000e0120006a000000df0410008a0000000201000367000000000331034f000000000503043b000000000345004b00000e57080000410000000003000019000000000308801900000e570440019700000e5706500197000000000746004b00000000070000190000000007084019000000000446013f00000e570440009c000000000703c019000000000307004b0000004a0000c13d0000000f031003600000001d0420006a0000001f0440008a000000000303043b000000000643004b00000e57090000410000000006000019000000000609801900000e570440019700000e5707300197000000000847004b00000000080000190000000008094019000000000447013f00000e570440009c000000000806c019000000000408004b0000004a0000c13d0000001d04300029000000000341034f000000000303043b00000e2b0630009c0000004a0000213d0000000d763000b900000000062600190000002004400039000000000764004b00000e570a000041000000000700001900000000070a201900000e570660019700000e5708400197000000000968004b000000000900001900000000090a4019000000000668013f00000e570660009c000000000907c019000000000609004b0000004a0000c13d000000200330006b000002d10000813d0000000c03100360000000000303043b00000e260630009c0000004a0000213d000000400f00043d00000e6306f0009c0000008f0000213d0000001a07500029000000a005f00039000000400050043f0000001d05100360000000000505043b00000000055f0436001f00000005001d0000000005720049000000c00650008c00000e57090000410000000006000019000000000609401900000e5705500197000000000805004b0000000008000019000000000809201900000e570550009c000000000806c019000000000508004b0000004a0000c13d000000400500043d00000e310650009c0000008f0000213d000000c006500039000000400060043f000000000671034f000000000606043b00000e260860009c0000004a0000213d00000000086504360000002006700039000000000961034f000000000909043b00000e2b0a90009c0000004a0000213d00000000009804350000002006600039000000000861034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004a0000c13d000000400950003900000000008904350000002008600039000000000881034f000000000808043b000000600950003900000000008904350000004006600039000000000861034f000000000808043b00000e2b0980009c0000004a0000213d000000000a7800190000001f07a00039000000000827004b00000e570c000041000000000800001900000000080c801900000e570770019700000e5709200197000000000b97004b000000000b000019000000000b0c4019000000000797013f00000e570770009c000000000b08c01900000000070b004b0000004a0000c13d0000000007a1034f000000000707043b00000e2b0870009c0000008f0000213d0000001f08700039001c0020000000920000001c0880017f0000003f088000390000001c0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b00403900000e2b0c90009c0000008f0000213d000000010bb001900000008f0000c13d000000400090043f0000000009780436000000200aa00039000000000ba70019000000000b2b004b0000004a0000213d000000000aa1034f000000050b70027200000d760000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b00000d6e0000413d0000001f0c70019000000d850000613d000000050bb00210000000000aba034f000000000bb90019000000030cc00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000a0a043b000001000cc00089000000000aca022f000000000aca01cf000000000ada019f0000000000ab043500000000077900190000000000070435000000800750003900000000008704350000002006600039000000000661034f000000000606043b000000a0075000390000000000670435000000200600002900000060766000c900000000046400190000000002420049000000600620008c00000e57080000410000000006000019000000000608401900000e5702200197000000000702004b0000000007000019000000000708201900000e570220009c000000000706c0190000001f020000290000000000520435000000000207004b0000004a0000c13d000000400200043d00000e640520009c0000008f0000213d0000006005200039000000400050043f000000000541034f000000000505043b000000ff0650008c0000004a0000213d00000000055204360000002006400039000000000661034f000000000606043b00000000006504350000004004400039000000000141034f000000000101043b000000400420003900000000001404350000006001f00039001b00000001001d00000000003104350000004006f0003900000000002604350000008002f000390000001101000029001600000002001d0000000000120435000000000101004b00000dd10000613d001900000006001d001e0000000f001d00000e5b010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e2b01100197000000110110006b0000001e0f00002900000019060000290000117c0000413d0000001f01000029000000000501043300000080015000390000000001010433000000200210003900000e240320009c00000e240400004100000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f00000000020f0433001500000002001d0000000002060433001200000002001d00000060025000390000000002020433001400000002001d00000020025000390000000002020433001f00000002001d00000040025000390000000002020433001e00000002001d0000001b020000290000000002020433001900000002001d001700000005001d0000000002050433001800000002001d000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f000000190300002900000e2604300197000000180300002900190e260030019b0000001e0300006b0000000003000019000000010300c039001800000003001d0000001f03000029001e0e2b0030019b00000001022001900000004a0000613d000000000101043b001300000001001d0000001701000029000000a0011000390000000001010433001700000001001d00000000004004350000000301000039000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039001f00000004001d388b38860000040f0000001f0500002900000001022001900000004a0000613d000000000101043b000000000201041a000000010300008a000000000332004b000011690000613d0000000103200039000000000031041b0000001601000029000000000101043300000e2b03100197000000400100043d0000016004100039000000000034043500000140031000390000000000230435000001200210003900000017030000290000000000320435000001000210003900000013030000290000000000320435000000e00210003900000014030000290000000000320435000000c00210003900000018030000290000000000320435000000a0021000390000001e030000290000000000320435000000800210003900000019030000290000000000320435000000600210003900000015030000290000000000320435000000400210003900000000005204350000016002000039000000000221043600000e6503000041000000000032043500000e660310009c0000008f0000213d0000018003100039000000400030043f00000e240320009c00000e240400004100000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b001900000001001d00000e590100004100000000001004390000000001000412001e00000001001d0000000400100443000000a001000039001800000001001d0000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e26011001970000000002000410001700000002001d000000000112004b00000ea30000c13d00000e590100004100000000001004390000001e01000029000000040010044300000080010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b001f00000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f0110006c00000ea30000c13d00000e590100004100000000001004390000001e01000029000000040010044300000060010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d00000efc0000013d000000400100043d001f00000001001d000000200210003900000e3001000041001600000002001d000000000012043500000e590100004100000000001004390000001e010000290000000400100443000000c0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f020000290000004002200039000000000012043500000e590100004100000000001004390000001e010000290000000400100443000000e0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f020000290000006002200039000000000012043500000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f04000029000000a00240003900000017030000290000000000320435000000800240003900000000001204350000001801000029000000000014043500000e310140009c0000008f0000213d0000001f02000029000000c001200039000000400010043f000000160300002900000e240130009c00000e240400004100000000030480190000004001300210000000000202043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b000000400200043d00000022032000390000001904000029000000000043043500000e6803000041000000000032043500000002032000390000000000130435000000000100041400000e240310009c00000e2404000041000000000104801900000e240320009c00000000020480190000004002200210000000c001100210000000000112019f00000e69011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000601043b0000001b010000290000000008010433000000120300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c0000008f0000213d0000008001700039000000400010043f0000000004070433000000410440008c00000f7a0000c13d000000000303043300000e6b0430009c00000f7a0000213d001b00000008001d001f00000002001d0000000002050433001e00000009001d0000000004090433001900000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435001800000007001d000000a003700039000000f80220027000000000002304350000000000000435000000000200041400000e240320009c00000e2404000041000000000204801900000e240310009c00000000010480190000004001100210000000c002200210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c00000000050300190000002005008039000000050450027200000f5d0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000f560000413d0000001f0550019000000f6b0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f000300000001035500000001022001900000001f020000290000001e090000290000001b04000029000011e20000613d000000000100043300000e26031001980000001906000029000000180700002900000f7a0000613d000000000141013f00000e2601100198000010030000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b00000f910000613d000000000500001900000000064500190000000007950019000000000707043300000000007604350000002005500039000000000635004b00000f8a0000413d000000000443001900000000000404350000001f033000390000001c0330017f00000064043000390000000000480435000000a3033000390000001c0430017f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c0000008f0000213d00000001044001900000008f0000c13d000000400030043f00000000030804330000000006000414000000040420008c00000fd90000c13d00000001020000390000000104000031000000000104004b00000fed0000613d00000e2b0140009c0000008f0000213d0000001f014000390000001c0110017f0000003f011000390000001c0110017f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c0000008f0000213d00000001055001900000008f0000c13d000000400010043f00000000014304360000000305000367000000050640027200000fc70000613d000000000700001900000005087002100000000009810019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000fbf0000413d0000001f0440019000000fd60000613d0000000506600210000000000565034f00000000066100190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f0000000000460435000000000202004b00000ff10000c13d000011100000013d00000e240410009c00000e24050000410000000001058019000000400110021000000e240430009c00000000030580190000006003300210000000000113019f00000e240360009c0000000006058019000000c003600210000000000131019f388b38860000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b00000faa0000c13d00000080010000390000000b03000029000000000202004b000011100000613d0000000002030433000000200320008c000011100000413d000000200320008c00000e57050000410000000003000019000000000305401900000e5702200197000000000402004b0000000004000019000000000405201900000e570220009c000000000403c019000000000204004b0000004a0000c13d000000000101043300000e6d0110009c000011100000c13d00000020020000290000000102200039000000100120006c00000cc20000413d0000000a02000029000000010120006c00000000010000190000000101006039001f00000001001d00000002010003670000000602100360000000000202043b001e00000002001d00000e260220009c0000004a0000213d000000000400003100000008020000290000003f0220003900000e6105200197000000400200043d0000000005520019002000000002001d000000000625004b0000000006000019000000010600403900000e2b0750009c0000008f0000213d00000001066001900000008f0000c13d000000400050043f00000010020000290000002003000029000000000023043500000008030000290000001a02300029000000000642004b0000004a0000213d0000001a0620006c000010b30000a13d00000020070000290000001a080000290000103b0000013d00000020077000390000000003bd0019000000000003043500000080039000390000000000c304350000002003a00039000000000331034f000000000303043b000000a005900039000000000035043500000000009704350000002008800039000000000328004b000010b30000813d000000000681034f000000000606043b00000e2b0960009c0000004a0000213d0000001a0b6000290000000006b40049000000c00960008c00000e57030000410000000009000019000000000903401900000e5706600197000000000a06004b000000000a000019000000000a03201900000e570660009c000000000a09c01900000000060a004b0000004a0000c13d000000400900043d00000e310690009c0000008f0000213d000000c006900039000000400060043f0000000006b1034f000000000606043b00000e260a60009c0000004a0000213d000000000a6904360000002006b00039000000000c61034f000000000c0c043b00000e2b0dc0009c0000004a0000213d0000000000ca0435000000200a6000390000000006a1034f000000000606043b000000000c06004b000000000c000019000000010c00c039000000000cc6004b0000004a0000c13d000000400c90003900000000006c04350000002006a00039000000000661034f000000000606043b000000600c90003900000000006c0435000000400aa000390000000006a1034f000000000606043b00000e2b0c60009c0000004a0000213d000000000eb600190000001f06e00039000000000b46004b000000000b000019000000000b03801900000e570660019700000e570c400197000000000dc6004b000000000d000019000000000d0340190000000006c6013f00000e570660009c000000000d0bc01900000000060d004b0000004a0000c13d0000000006e1034f000000000b06043b00000e2b06b0009c0000008f0000213d0000001f06b000390000001c0660017f0000003f066000390000001c0660017f000000400c00043d00000000066c0019000000000dc6004b000000000d000019000000010d00403900000e2b0f60009c0000008f0000213d000000010dd001900000008f0000c13d000000400060043f000000000dbc04360000002006e00039000000000e6b0019000000000e4e004b0000004a0000213d000000000e61034f000000050fb00272000010a30000613d0000000006000019000000050560021000000000035d001900000000055e034f000000000505043b000000000053043500000001066000390000000003f6004b0000109b0000413d0000001f06b001900000102d0000613d0000000503f0021000000000053e034f00000000033d00190000000306600210000000000e030433000000000e6e01cf000000000e6e022f000000000505043b0000010006600089000000000565022f00000000056501cf0000000005e5019f00000000005304350000102d0000013d0000001d01100360000000000101043b00000020020000290000001e030000290000000904000029000900000004001d0000001f05000029388b1c390000040f0000000012010434000000090320006b000011690000413d000001200300043d0000000a0330006c000002d10000a13d0000000003010433000000050400002900000140044000390000000000340435000001200300043d0000000a0330006c000002d10000a13d00090009002000710000000001010433000000000101043300000004021000290000000a030000290000000103300039000000020130006c00000c430000413d000005f10000013d000000000001042f000000ff0210018f000000200320008c000007c50000813d002000000007001d00000e290370009c0000008f0000213d00000020040000290000004003400039000000400030043f000000200340003900000000001304350000000000240435000000400300043d000011300000013d001b00050000003d001a80100000003d0019800d0000003d001800030000003d0000000002000019001f00000002001d00000005012002100000001d011000290000000201100367000000000101043b002000000001001d00000000001004350000001b01000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000001a02000029388b38860000040f00000001022001900000004a0000613d000000000101043b000000000201041a00000e2b03200198000011130000c13d00000e5e022001970000001c06000029000000000262019f000000000021041b000000000100041400000e240210009c00000e2401008041000000c00110021000000e2d011001c70000001902000029000000180300002900000e5f040000410000002005000029388b38810000040f00000001012001900000004a0000613d0000001f0200002900000001022000390000001e0120006c000010e50000413d000006ab0000013d000000400100043d00000e7d02000041000007bb0000013d000000400100043d00000e5d02000041000007bb0000013d0000000000400435000000020330008c0000000003000019000011230000413d00000e700400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000513004b0000111c0000413d0000003f01300039000000200200008a000000000121016f0000002002100029000000000112004b00000000010000190000000101004039000000000302001900000e2b0220009c0000008f0000213d00000001011001900000008f0000c13d000000400030043f000000000203001900000e710130009c0000008f0000213d001d00000002001d0000002001200039000000400010043f0000000000020435000000400300043d001f00000003001d0000002001300039000000e002000039000000000021043500000e72010000410000000000130435000000e0023000390000001e01000029388b121b0000040f00000000020100190000001f030000290000000001320049000000400330003900000000001304350000002001000029388b121b0000040f002000000001001d0000800b0100003900000004030000390000000004000415000000290440008a000000050440021000000e2e02000041388b38620000040f0000001f04000029000000c00540003900000020020000290000000003420049000000000035043500000080054000390000000003000410000000000035043500000060034000390000000000130435000000a00140003900000000000104350000001d01000029388b123d0000040f0000001f04000029000000000141004900000e240200004100000e240340009c000000000402801900000e240310009c00000000010280190000081d0000013d000000400100043d00000e7902000041000007bb0000013d00000e770100004100000000001004350000001101000039000000040010043f00000e78010000410000388d00010430000000000403004b0000000004000019000011740000613d0000001e0400002900000000040404330000000305300210000000010600008a000000000556022f000000000565013f000000000454016f0000000103300210000000000334019f000011980000013d000000400100043d00000e7b02000041000007bb0000013d00000e3204000041000000200500003900000000070000190000001a0900002900000000089500190000000008080433000000000084041b000000200550003900000001044000390000002007700039000000000867004b000011830000413d000000000636004b000011960000813d0000000306300210000000f80660018f000000010700008a000000000667022f000000000676013f0000001a055000290000000005050433000000000565016f000000000054041b000000010330021000000001033001bf000000000032041b000000200200002900000e26022001980000119f0000c13d000000400100043d00000e3402000041000007bb0000013d0000002005000029000001c00050043f000000800200043d00000140000004430000016000200443000000a00300043d00000020020000390000018000200443000001a0003004430000004003000039000000c00400043d000001c000300443000001e0004004430000006003000039000002000030044300000220001004430000008001000039000001000300043d000002400010044300000260003004430000001d0100002900000280001004430000001f01000029000002a000100443000000c001000039000001400300043d000002c000100443000002e000300443000000e001000039000001600300043d000003000010044300000320003004430000010001000039000001800300043d000003400010044300000360003004430000012001000039000001a00300043d0000038000100443000003a0003004430000014001000039000003c000100443000003e00050044300000100002004430000000b01000039000001200010044300000e33010000410000388c0001042e000000400200043d0000001f0430018f0000000505300272000011dc0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000011d40000413d000000000604004b000011f10000c13d000011fe0000013d000000400100043d00000e7e02000041000007bb0000013d000000400200043d0000001f0430018f0000000505300272000011ef0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000011e70000413d000000000604004b000011fe0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300000002001000029000000a401100039000000000113034f000000000301043b00000e260130009c0000004a0000213d00000000040004160000001e010000290000036e0000013d000000000403004b000012180000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000012110000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000203004b000012270000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b000012200000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d00000020030000390000000004310436000000000302043300000000003404350000004001100039000000000403004b0000123c0000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000534004b000012360000413d000000000001042d000000000301001900000000040304330000000001420436000000000204004b000012490000613d00000000020000190000002003300039000000000503043300000000015104360000000102200039000000000542004b000012430000413d000000000001042d00000000430104340000000003320436000000000404043300000000004304350000004003100039000000000303043300000e2b03300197000000400420003900000000003404350000006003100039000000000303043300000e2b03300197000000600420003900000000003404350000008003100039000000000303043300000e2b0330019700000080042000390000000000340435000000a0031000390000000003030433000000a0042000390000000000340435000000c003100039000000000303043300000e2603300197000000c0042000390000000000340435000000e003100039000000000303043300000e2603300197000000e004200039000000000034043500000100031000390000000003030433000000000303004b0000000003000019000000010300c03900000100042000390000000000340435000001200110003900000000010104330000012003200039000001400400003900000000004304350000014005200039000000004301043400000000003504350000016001200039000000000203004b000012850000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b0000127e0000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001120019000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b0000000002000019000000010200403900000e2b0310009c000012990000213d0000000102200190000012990000c13d000000400010043f000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e270210009c000012b90000813d0000004002100039000000400020043f00000001020000390000000002210436000000400300043d00000e310430009c000012b90000213d000000c004300039000000400040043f000000800430003900000060050000390000000000540435000000a004300039000000000004043500000060043000390000000000040435000000400430003900000000000404350000002004300039000000000004043500000000000304350000000000320435000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d000104300000000003100079000000bf0330008a0000000202200367000000000202043b00000e5704000041000000000532004b0000000005000019000000000504401900000e570330019700000e5706200197000000000736004b000000000400a019000000000336013f00000e570330009c000000000405c019000000000304004b000012d20000613d0000000001120019000000000001042d00000000010000190000388d000104300000000012010434000000000202004b000012d80000613d000000000001042d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d000104300000000003010019000000000132004900000e5704000041000000bf0510008c0000000005000019000000000504201900000e5701100197000000000601004b000000000400801900000e570110009c000000000405c019000000000104004b0000135d0000613d000000400100043d00000e7f0410009c0000135f0000813d000000c004100039000000400040043f0000000204000367000000000534034f000000000505043b00000e260650009c0000135d0000213d00000000065104360000002005300039000000000754034f000000000707043b00000e2b0870009c0000135d0000213d00000000007604350000002005500039000000000654034f000000000606043b000000000706004b0000000007000019000000010700c039000000000776004b0000135d0000c13d000000400710003900000000006704350000002006500039000000000664034f000000000606043b000000600710003900000000006704350000004005500039000000000654034f000000000606043b00000e2b0760009c0000135d0000213d00000000083600190000001f0380003900000e5706000041000000000723004b0000000007000019000000000706801900000e570330019700000e5709200197000000000a93004b0000000006008019000000000393013f00000e570330009c000000000607c019000000000306004b0000135d0000c13d000000000384034f000000000303043b00000e2b0630009c0000135f0000213d0000001f06300039000000200700008a000000000676016f0000003f06600039000000000776016f000000400600043d0000000007760019000000000967004b0000000009000019000000010900403900000e2b0a70009c0000135f0000213d00000001099001900000135f0000c13d000000400070043f000000000736043600000020088000390000000009380019000000000229004b0000135d0000213d000000000884034f0000001f0230018f0000000509300272000013440000613d000000000a000019000000050ba00210000000000cb70019000000000bb8034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b0000133c0000413d000000000a02004b000013530000613d0000000509900210000000000898034f00000000099700190000000302200210000000000a090433000000000a2a01cf000000000a2a022f000000000808043b0000010002200089000000000828022f00000000022801cf0000000002a2019f000000000029043500000000023700190000000000020435000000800210003900000000006204350000002002500039000000000224034f000000000202043b000000a0031000390000000000230435000000000001042d00000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e270210009c000013760000813d0000004002100039000000400020043f00000001020000390000000002210436000000400300043d00000e290430009c000013760000213d0000004004300039000000400040043f0000002004300039000000000004043500000000000304350000000000320435000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e5702000041000000630310008c0000000003000019000000000302201900000e5701100197000000000401004b000000000200801900000e570110009c000000000203c019000000000102004b000013940000613d000000400100043d00000e270210009c000013960000813d0000004002100039000000400020043f00000002020003670000002403200370000000000303043b00000000033104360000004402200370000000000202043b0000000000230435000000000001042d00000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e800210009c000013b60000813d0000014002100039000000400020043f00000120021000390000006003000039000000000032043500000100021000390000000000020435000000e0021000390000000000020435000000c0021000390000000000020435000000a0021000390000000000020435000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d000104300004000000000002000000400500043d00000e800250009c0000142f0000813d0000014002500039000000400020043f000000000201041a00000000022504360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000400350003900000e2b042001970000000000430435000000800320027000000e2b0330019700000080045000390000000000340435000000400220027000000e2b02200197000000600350003900000000002304350000000302100039000000000202041a000000a00350003900000000002304350000000402100039000000000202041a00000e2602200197000000c00350003900000000002304350000000502100039000000000202041a000000e00350003900000e26042001970000000000430435000001000350003900000e81022001980000000002000019000000010200c03900000000002304350000000601100039000000000201041a000000010320019000000001042002700000007f0740018f000000000704c0190000001f0470008c00000000040000190000000104002039000000000443004b000014350000c13d000000400600043d0000000004760436000000000303004b000014150000613d000100000004001d000400000007001d000200000006001d000300000005001d000000000010043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000143b0000613d0000000407000029000000000207004b0000141c0000613d000000000201043b00000000010000190000000305000029000000020600002900000001080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000371004b0000140d0000413d0000141f0000013d000001000100008a000000000112016f0000000000140435000000000107004b000000200100003900000000010060190000141f0000013d0000000001000019000000030500002900000002060000290000003f01100039000000200200008a000000000221016f0000000001620019000000000221004b0000000002000019000000010200403900000e2b0310009c0000142f0000213d00000001022001900000142f0000c13d000000400010043f000001200150003900000000006104350000000001050019000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d0001043000000000001004350000000401000039000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f0000000102200190000014500000613d000000000101043b000000000101041a000000000101004b0000000001000019000000010100c039000000000001042d00000000010000190000388d000104300018000000000002001200000003001d000300000002001d000800000001001d000000e00040043f000000400100043d00000e270210009c00001b870000813d0000004002100039000000400020043f000000200210003900000060080000390000000000820435000000000001043500000003010000290000000021010434000200000002001d000400000001001d000000400100043d00000e290210009c00001b870000213d0000004002100039000000400020043f000000200210003900000000008204350000000000010435000000a00010043f000000040100002900000e2b0110009c00001b870000213d0000000401000029000000050b1002100000003f01b0003900000e610a100197000000400100043d0000000002a10019000000000312004b0000000003000019000000010300403900000e2b0420009c00001b870000213d000000010330019000001b870000c13d000000400020043f000000040200002900000000022104360000001f07b0018f0000000509b002720000148e0000613d00000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b00000000005604350000000104400039000000000594004b000014860000413d00150000000b001d00160000000a001d001300000009001d001700000008001d001400000007001d000000000207004b000014950000613d000000a00200043d0000002002200039000000000012043500000e8201000041000000400200043d0000000000120435001800000002001d00000004012000390000000802000029000000000021043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000100000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f000000010220019000001b930000613d000000000201043b000000000100041400000e2602200197000000040320008c000014b80000c13d00000003010003670000000103000031000014ca0000013d00000e240300004100000e240410009c0000000001038019000000180500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e24033001970003000000010355000000010220019000001bc20000613d0000001709000029000000160a000029000000150b00002900000018080000290000001f0230018f000000c00000043f0000000504300272000014db0000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014d30000413d000000000502004b000014ea0000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000d0020000000920000000d0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c00001b870000213d000000010220019000001b870000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b00001b850000613d000000000408043300000e2b0240009c00001b850000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b00001b850000c13d00000e6a0410009c00001b870000213d0000008004100039000000400040043f00000000540304340000000004410436000000000505043300000e260650009c00001b850000213d000000000054043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b00001b850000c13d000000400510003900000000004504350000006004300039000000000404043300000e2b0540009c00001b850000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b00001b850000c13d000000004303043400000e2b0530009c00001b870000213d0000001f053000390000000d0550017f0000003f055000390000000d0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c00001b870000213d000000010770019000001b870000c13d000000400060043f00000000063504360000000007430019000000000227004b00001b850000213d000000000203004b000015570000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b000015500000413d0000000002360019000000000002043500000060021000390000000000520435000000c00010043f000000400200043d0000000001010433000000000101004b00001bae0000613d0000000001a20019000000000321004b0000000003000019000000010300403900000e2b0410009c00001b870000213d000000010330019000001b870000c13d000000400010043f00000004030000290000000001320436000000000303004b0000158b0000613d0000000003000019000000400400043d00000e830540009c00001b870000213d0000014005400039000000400050043f0000012005400039000000000095043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000002005400039000000000005043500000000000404350000000005310019000000000045043500000020033000390000000004b3004b0000156e0000413d000000800020043f000000400f00043d0000000001af00190000000002f1004b0000000002000019000000010200403900000e2b0310009c00001b870000213d000000010220019000001b870000c13d000000400010043f000000040100002900000000011f04360000001306000029000000000206004b000015a60000613d00000000020000310000000202200367000000000300001900000005043002100000000005410019000000000442034f000000000404043b00000000004504350000000103300039000000000463004b0000159e0000413d000000140100006b000015a80000613d0000010000f0043f000000040100006b000017a20000613d000000120100002900070e260010019b00000e2403000041000000000200001900000003010000290000000001010433000000000121004b00001b8d0000a13d0000000504200210000900000004001d000000020140002900000000040104330000002005400039000000000105043300000e2b01100198000b00000002001d000a00000004001d000015d10000613d001700000001001d001800000005001d00000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f000000010220019000001b930000613d000000000101043b00000e2b01100197000000170110006b00000e24030000410000000a04000029000000180500002900001b9a0000a13d00000040014000390000000001010433000000c00200043d00000040022000390000000002020433000000000202004b000015da0000c13d000000000201004b00001ba00000c13d000000000101004b0000000001000019000000010100c039001600000001001d00000080014000390000000001010433001800000001001d000000000104043300130e260010019b000000000105043300110e2b0010019b0000006001400039000500000001001d0000000001010433001200000001001d000000400100043d000c00000001001d00000e830110009c00001b870000213d0000000c040000290000014001400039000000400010043f00000020024000390000000801000029001700000002001d0000000000120435000000000004043500000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000000c040000290000012002400039000e00000002001d000000180b0000290000000000b204350000010002400039001500000002001d00000016030000290000000000320435000000e0034000390000000702000029001600000003001d0000000000230435000000c002400039001400000002001d00000013030000290000000000320435000000a002400039001300000002001d000000120300002900000000003204350000006002400039001200000002001d0000001103000029000000000032043500000e2b011001970000004002400039001100000002001d00000000001204350000008001400039000600000001001d0000000000010435000000000a000019000000170100002900000000030104330000001301000029000000000201043300000015010000290000000004010433000000120100002900000000050104330000001101000029000000000601043300000016010000290000000007010433000000140100002900000000010104330000006008100210000000400100043d00000040091000390000000000890435000000600770021000000054081000390000000000780435000000c00660021000000068071000390000000000670435000000c00550021000000070061000390000000000560435000000000404004b00000e86040000410000000004006019000000780510003900000000004504350000007904100039000000000024043500000020021000390000000000320435000000990410003900000000530b0434000000000603004b000016520000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000736004b0000164b0000413d0000000004430019000000e005a0021000000000005404350000007d043000390000000000410435000000bc033000390000000d0430017f0000000003140019000000000443004b0000000004000019000000010400403900000e2b0530009c00000e240500004100001b870000213d000000010440019000001b870000c13d00180000000a001d000000400030043f00000e240320009c00000000020580190000004002200210000000000101043300000e240310009c00000000010580190000006001100210000000000121019f000000000200041400000e240320009c0000000002058019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000000101043b001000000001001d00000000001004350000000401000039000f00000001001d000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000000101043b000000000101041a000000000101004b0000168f0000613d0000000e01000029000000000b0104330000001801000029000000010110003900000e240a100197000016220000013d0000000c010000290000001002000029000000000021043500000000002004350000000f01000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f000000010220019000001b850000613d0000000c020000290000000002020433000000000101043b000000000021041b000000170200002900000000020204330000000103100039000000000023041b0000001102000029000000000202043300000e2b022001970000000203100039000000000403041a00000e8704400197000000000224019f00000012040000290000000004040433000000400440021000000e8804400197000000000242019f00000006040000290000000004040433000000800440021000000e8904400197000000000242019f000000000023041b000000130200002900000000020204330000000303100039000000000023041b0000001402000029000000000202043300000e26022001970000000403100039000000000403041a00000e8a04400197000000000224019f000000000023041b00000015020000290000000002020433000000000202004b00000e8b0200004100000000020060190000001603000029000000000303043300000e26033001970000000504100039000000000504041a00000e8c05500197000000000335019f000000000223019f000000000024041b0000000e02000029000000000402043300000000b504043400000e2b0250009c00000e240600004100001b870000213d000000060a10003900000000010a041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b00001b940000c13d000000200130008c00180000000a001d001700000005001d001600000004001d000017080000413d001400000003001d00150000000b001d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f000000010220019000001b850000613d00000017050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000014010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000e2406000041000000180a000029000000150b000029000017080000813d000000000002041b0000000102200039000000000312004b000017040000413d0000001f0150008c000017370000a13d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000170b0000290000000d03b00180000000000101043b000000160c000029000017980000613d0000002002000039000000000400001900000e24060000410000000a070000290000000c080000290000000509000029000000180a0000290000000005c200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000017200000413d0000000003b3004b000017330000813d0000000303b00210000000f80330018f000000010400008a000000000334022f000000000343013f0000000002c200190000000002020433000000000232016f000000000021041b0000000101b0021000000001011001bf0000000b04000029000017470000013d000000000105004b0000000a070000290000000c0800002900000005090000290000173e0000613d00000000010b04330000173f0000013d00000000010000190000000b040000290000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000000001a041b0000000001090433000000000201004b0000175f0000613d00000000001004350000000f01000029000000200010043f000000000100041400000e240210009c0000000001068019000000c00110021000000e5c011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000000101043b000000000101041a000000000101004b00000e24060000410000000b040000290000000a070000290000000c0800002900001b9d0000613d000000800100043d0000000002010433000000000242004b00001b8d0000a13d000000090110002900000020011000390000000000810435000000800100043d0000000001010433000000000141004b00001b8d0000a13d000001000200043d0000000001020433000000000141004b00001b8d0000a13d000000090100002900000020011000390000000002210019000000a00370003900000000030304330000000000320435000000a00200043d000000200220003900000000020204330000000003020433000000000343004b00001b8d0000a13d0000000001210019000000100300002900000000003104350000000002070433000000400100043d0000000000310435000000000300041400000e240430009c000000000306801900000e240410009c00000000010680190000004001100210000000c003300210000000000113019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000e8e0400004100000007060000290000000807000029388b38810000040f000000010120019000001b850000613d0000000b020000290000000102200039000000040120006c00000e2403000041000015af0000413d000017a10000013d000000200200003900000e24060000410000000a070000290000000c080000290000000509000029000000180a0000290000000003b3004b0000172a0000413d000017330000013d000001000f00043d000000c00100043d000000e00d00043d000000800900043d000000002c0904340000000103c0008c000017bf0000c13d00000000340f0434000000000404004b00001b8d0000613d000000000502043300000000070304330000002001100039000000000101043300000e2608100198000017fc0000613d000000400b00043d000000000107004b001700000007001d000018840000613d00000e8f0100004100000000001b04350000000001000414000000040280008c000018870000c13d0000000103000031000000200130008c00000000040300190000002004008039000018c00000013d0000002001100039000000000101043300000e2608100198000017cf0000613d000000400e00043d00000e8f0100004100000000001e04350000000001000414000000040280008c001600000008001d0000181c0000c13d000000010b0000310000002001b0008c00000000040b00190000002004008039000018560000013d00000000010c004b000017de0000613d0000002001f0003900000000020f04330000000003000019000000000432004b00001b8d0000a13d000000050430021000000000044100190000000004040433000000000404004b00001ba30000c13d00000001033000390000000004c3004b000017d40000413d00000000010d004b000019d70000613d00180000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c00001b310000c13d00000001020000390000000101000031000000000301004b00001b400000c13d00001b6d0000013d000000000107004b00001ba30000c13d00000000010d004b000019d70000613d00180000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c000019d90000c13d00000001020000390000000101000031000000000301004b000019e80000c13d00001b6d0000013d00140000000c001d001500000009001d00170000000f001d00180000000d001d00000e240200004100000e240310009c000000000102801900000e2403e0009c00000000020e40190000004002200210000000c001100210000000000121019f00000e35011001c7000000000208001900130000000e001d388b38860000040f000000130e0000290000000003010019000000600330027000000e240b3001970000002004b0008c00000000040b001900000020040080390000001f0540018f00000005064002720000183f0000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000018370000413d000000000705004b0000184e0000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f000000000056043500010000000b001f00030000000103550000000102200190000000180d000029000000170f0000290000001509000029000000140c00002900001be40000613d0000001f01400039000000600110018f000000000ae1001900000000021a004b0000000002000019000000010200403900000e2b04a0009c00001b870000213d000000010220019000001b870000c13d0000004000a0043f0000002002b0008c00001b850000413d00000000050e0433000000000205004b0000000002000019000000010200c039000000000225004b00001b850000c13d00000000020c004b000018860000613d0000002002f0003900000000040f0433000000000505004b0000193e0000613d00000000050000190000000003000019000018750000013d00000001055000390000000006c5004b0000194a0000813d000000000654004b00001b8d0000a13d000000050650021000000000062600190000000006060433000000000706004b000018720000613d00000000076d004b00001bdc0000413d0000000003360019000000000d6d004900000001055000390000000006c5004b000018750000413d0000194a0000013d000000000a0b0019000018d80000013d000019490000013d001400000005001d00180000000d001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001500000008001d000000000208001900160000000b001d388b38860000040f000000160b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000018a90000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000018a10000413d000000000705004b000018b80000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000180d000029000000170700002900001c160000613d000000150800002900000014050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c00001b870000213d000000010110019000001b870000c13d0000004000a0043f000000200130008c00001b850000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b00001b850000c13d000000000101004b00001bac0000613d00000000017d004b00001bdc0000413d000000000d7d004900000e960100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000010300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b0000191a0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b000019130000413d000000000231001900000000000204350000000002000414000000040380008c00180000000d001d000019250000c13d0000000103000031000000200130008c0000000004030019000000200400803900001a320000013d0000001f011000390000000d0110017f00000e240300004100000e2404a0009c00160000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f000000000207004b00001a090000613d00000e2d011001c7000080090200003900000000030700190000000004080019000000000500001900001a0a0000013d0000000005000019000000000654004b00001b8d0000a13d000000050650021000000000062600190000000006060433000000000606004b00001bac0000c13d00000001055000390000000006c5004b0000193f0000413d0000000003000019001500000001001d00170000000b001d00000e920200004100000000002a04350000000402a000390000004004000039000000000042043500000000040904330000004405a0003900000000004504350000006405a0003900000005064002100000000007560019000000000604004b000019a80000613d0000000006000019000019650000013d0000001f098000390000000d0990017f0000000008780019000000000008043500000000077900190000000106600039000000000846004b000000000a0e00190000000009010019000019a80000813d000000000e0a00190000000008a70049000000640880008a000000000585043600000020099000390000000001090019000000000809043300000000a90804340000000009970436000000000a0a04330000000000a904350000004009800039000000000909043300000e2b09900197000000400a70003900000000009a04350000006009800039000000000909043300000e2b09900197000000600a70003900000000009a04350000008009800039000000000909043300000e2b09900197000000800a70003900000000009a0435000000a0098000390000000009090433000000a00a70003900000000009a0435000000c009800039000000000909043300000e2609900197000000c00a70003900000000009a0435000000e009800039000000000909043300000e2609900197000000e00a70003900000000009a043500000100098000390000000009090433000000000909004b0000000009000019000000010900c039000001000a70003900000000009a0435000001200880003900000000080804330000012009700039000000010a0000290000000000a90435000001400a700039000000009808043400000000008a04350000016007700039000000000a08004b0000195b0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa00039000000000b8a004b000019a00000413d0000195b0000013d00000000022700490000002404a00039000000000024043500000000080f04330000000002870436000000000508004b000019ba0000613d0000000005000019000000170b00002900000016040000290000001501000029000000200ff0003900000000060f043300000000026204360000000105500039000000000685004b000019b30000413d000019bd0000013d000000170b000029000000160400002900000015010000290000000007000414000000040540008c001700000003001d00180000000d001d00001abe0000613d0000000001a2004900000e240200004100000e2405a0009c00150000000a001d000000000502001900000000050a4019000000400650021000000e240510009c00000000010280190000006001100210000000000161019f00000e240570009c0000000007028019000000c002700210000000000121019f000000000203004b00001a930000613d00000e2d011001c70000800902000039000000000500001900001a940000013d000000000900001900001b2d0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b00001b6d0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001a060000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000019fe0000413d000000000603004b00001b600000c13d00001b6d0000013d0000000002080019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000160a00002900001a1e0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001a160000413d000000000705004b000000180d00002900001a2e0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000001bf50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c00001b870000213d000000010220019000001b870000c13d000000400010043f000000200230008c00001b850000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b00001b850000c13d000000000202004b00001bd20000613d00000000010d004b00001aec0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c00001a620000c13d0000000102000039000000010100003100001a6f0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e24011001970000001709000029000000000301004b00001b2b0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001a900000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00001a880000413d000000000603004b00001b1e0000c13d00001b2b0000013d0000000002040019388b38810000040f0000000003010019000000600330027000000e240b3001970000002004b0008c00000000040b001900000020040080390000001f0540018f0000000506400272000000150a00002900001aa80000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001aa00000413d000000000705004b000000180d00002900001ab80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f000000000056043500010000000b001f0003000000010355000000010220019000001c050000613d0000001f01400039000000600110018f0000000002a10019000000000112004b0000000001000019000000010100403900000e2b0420009c00001b870000213d000000010110019000001b870000c13d000000400020043f0000002001b0008c00001b850000413d00000000010a0433000000000301004b0000000003000019000000010300c039000000000331004b00001b850000c13d000000000101004b00001bd40000613d00000000010d004b00001aec0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c00001aee0000c13d0000000102000039000000010100003100001afb0000013d000000170900002900001b2d0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e24011001970000001709000029000000000301004b00001b2b0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001b1c0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00001b140000413d000000000603004b00001b2b0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b00001b700000613d000000a00100043d0000000000910435000000a00100043d000000000001042d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b00001b6d0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001b5e0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00001b560000413d000000000603004b00001b6d0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000000000900001900001b2d0000c13d000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d0001043000000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d00010430000000000001042f00000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e840200004100001ba50000013d000000400100043d00000e8d0200004100001ba50000013d000000400100043d00000e850200004100001ba50000013d000000400100043d00000e9102000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e910100004100001bdd0000013d00000e9e0100004100001bd50000013d000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d00010430000000400200043d0000001f0430018f000000050530027200001bcf0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bc70000413d000000000604004b00001c250000c13d00001c320000013d00000e970200004100001ba50000013d00000e9501000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f04b0018f00000000030b00190000000505b0027200001bf20000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bea0000413d000000000604004b00001c320000613d00001c250000013d000000400200043d0000001f0430018f000000050530027200001c020000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bfa0000413d000000000604004b00001c320000613d00001c250000013d000000400200043d0000001f04b0018f00000000030b00190000000505b0027200001c130000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001c0b0000413d000000000604004b00001c320000613d00001c250000013d000000400200043d0000001f0430018f000000050530027200001c230000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001c1b0000413d000000000604004b00001c320000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d00010430001a000000000002001400000003001d000500000002001d000a00000001001d000000800040043f000000e00050043f000000400100043d00000e270210009c0000236c0000813d0000004002100039000000400020043f000000200210003900000060080000390000000000820435000000000001043500000005010000290000000021010434000400000002001d000600000001001d000000400100043d00000e290210009c0000236c0000213d0000004002100039000000400020043f000000200210003900000000008204350000000000010435000001000010043f000000060100002900000e2b0110009c0000236c0000213d0000000601000029000000050b1002100000003f01b0003900000e610a100197000000400100043d0000000002a10019000000000312004b0000000003000019000000010300403900000e2b0420009c0000236c0000213d00000001033001900000236c0000c13d000000400020043f000000060200002900000000022104360000001f07b0018f0000000509b0027200001c760000613d00000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b00000000005604350000000104400039000000000594004b00001c6e0000413d00170000000b001d00180000000a001d001500000009001d001900000008001d001600000007001d000000000207004b00001c7d0000613d000001000200043d0000002002200039000000000012043500000e8201000041000000400200043d0000000000120435001a00000002001d00000004012000390000000a02000029000000000021043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000200000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000023780000613d000000000201043b000000000100041400000e2602200197000000040320008c00001ca00000c13d0000000301000367000000010300003100001cb20000013d00000e240300004100000e240410009c00000000010380190000001a0500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e240330019700030000000103550000000102200190000023950000613d0000001909000029000000180a000029000000170b0000290000001a080000290000001f0230018f000000050430027200001cc20000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00001cba0000413d000000000502004b00001cd10000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000f0020000000920000000f0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c0000236c0000213d00000001022001900000236c0000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b0000236a0000613d000000000408043300000e2b0240009c0000236a0000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b0000236a0000c13d00000e6a0410009c0000236c0000213d0000008004100039000000400040043f00000000540304340000000004410436000100000004001d000000000405043300000e260540009c0000236a0000213d0000000105000029000000000045043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b0000236a0000c13d0000004005100039000300000005001d00000000004504350000006004300039000000000404043300000e2b0540009c0000236a0000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b0000236a0000c13d000000004303043400000e2b0530009c0000236c0000213d0000001f053000390000000f0550017f0000003f055000390000000f0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c0000236c0000213d00000001077001900000236c0000c13d000000400060043f00000000063504360000000007430019000000000227004b0000236a0000213d000000000203004b00001d410000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b00001d3a0000413d0000000002360019000000000002043500000060021000390000000000520435000000400200043d0000000001010433000000000101004b000023930000613d0000000001a20019000000000321004b0000000003000019000000010300403900000e2b0410009c0000236c0000213d00000001033001900000236c0000c13d000000400010043f00000006030000290000000001320436000000000303004b00001d740000613d0000000003000019000000400400043d00000e830540009c0000236c0000213d0000014005400039000000400050043f0000012005400039000000000095043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000002005400039000000000005043500000000000404350000000005310019000000000045043500000020033000390000000004b3004b00001d570000413d000000c00020043f000000400800043d0000000001a80019000000000281004b0000000002000019000000010200403900000e2b0310009c0000236c0000213d00000001022001900000236c0000c13d000000400010043f000000060100002900000000011804360000001506000029000000000206004b00001d8f0000613d00000000020000310000000202200367000000000300001900000005043002100000000005410019000000000442034f000000000404043b00000000004504350000000103300039000000000463004b00001d870000413d000000160100006b00001d910000613d000000a00080043f000000060100006b00001f8a0000613d000000140100002900090e260010019b00000e2403000041000000000200001900000005010000290000000001010433000000000121004b000023720000a13d0000000504200210000b00000004001d000000040140002900000000040104330000002005400039000000000105043300000e2b01100198000d00000002001d000c00000004001d00001dba0000613d001900000001001d001a00000005001d00000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000023780000613d000000000101043b00000e2b01100197000000190110006b00000e24030000410000000c040000290000001a050000290000237f0000a13d0000004001400039000000000101043300000003020000290000000002020433000000000202004b00001dc20000c13d000000000201004b000023850000c13d000000000101004b0000000001000019000000010100c039001800000001001d00000080014000390000000001010433001a00000001001d000000000104043300150e260010019b000000000105043300130e2b0010019b0000006001400039000700000001001d0000000001010433001400000001001d000000400100043d000e00000001001d00000e830110009c0000236c0000213d0000000e040000290000014001400039000000400010043f00000020024000390000000a01000029001900000002001d0000000000120435000000000004043500000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000000e040000290000012002400039001000000002001d0000001a0b0000290000000000b204350000010002400039001700000002001d00000018030000290000000000320435000000e0034000390000000902000029001800000003001d0000000000230435000000c002400039001600000002001d00000015030000290000000000320435000000a002400039001500000002001d000000140300002900000000003204350000006002400039001400000002001d0000001303000029000000000032043500000e2b011001970000004002400039001300000002001d00000000001204350000008001400039000800000001001d0000000000010435000000000a000019000000190100002900000000030104330000001501000029000000000201043300000017010000290000000004010433000000140100002900000000050104330000001301000029000000000601043300000018010000290000000007010433000000160100002900000000010104330000006008100210000000400100043d00000040091000390000000000890435000000600770021000000054081000390000000000780435000000c00660021000000068071000390000000000670435000000c00550021000000070061000390000000000560435000000000404004b00000e86040000410000000004006019000000780510003900000000004504350000007904100039000000000024043500000020021000390000000000320435000000990410003900000000530b0434000000000603004b00001e3a0000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000736004b00001e330000413d0000000004430019000000e005a0021000000000005404350000007d043000390000000000410435000000bc033000390000000f0430017f0000000003140019000000000443004b0000000004000019000000010400403900000e2b0530009c00000e24050000410000236c0000213d00000001044001900000236c0000c13d001a0000000a001d000000400030043f00000e240320009c00000000020580190000004002200210000000000101043300000e240310009c00000000010580190000006001100210000000000121019f000000000200041400000e240320009c0000000002058019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000000101043b001200000001001d00000000001004350000000401000039001100000001001d000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000000101043b000000000101041a000000000101004b00001e770000613d0000001001000029000000000b0104330000001a01000029000000010110003900000e240a10019700001e0a0000013d0000000e010000290000001202000029000000000021043500000000002004350000001101000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d0000000e020000290000000002020433000000000101043b000000000021041b000000190200002900000000020204330000000103100039000000000023041b0000001302000029000000000202043300000e2b022001970000000203100039000000000403041a00000e8704400197000000000224019f00000014040000290000000004040433000000400440021000000e8804400197000000000242019f00000008040000290000000004040433000000800440021000000e8904400197000000000242019f000000000023041b000000150200002900000000020204330000000303100039000000000023041b0000001602000029000000000202043300000e26022001970000000403100039000000000403041a00000e8a04400197000000000224019f000000000023041b00000017020000290000000002020433000000000202004b00000e8b0200004100000000020060190000001803000029000000000303043300000e26033001970000000504100039000000000504041a00000e8c05500197000000000335019f000000000223019f000000000024041b0000001002000029000000000402043300000000b504043400000e2b0250009c00000e24060000410000236c0000213d000000060a10003900000000010a041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000023790000c13d000000200130008c001a0000000a001d001900000005001d001800000004001d00001ef00000413d001600000003001d00170000000b001d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d00000019050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000016010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000e24060000410000001a0a000029000000170b00002900001ef00000813d000000000002041b0000000102200039000000000312004b00001eec0000413d0000001f0150008c00001f1f0000a13d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000190b0000290000000f03b00180000000000101043b000000180c00002900001f800000613d0000002002000039000000000400001900000e24060000410000000c070000290000000e0800002900000007090000290000001a0a0000290000000005c200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00001f080000413d0000000003b3004b00001f1b0000813d0000000303b00210000000f80330018f000000010400008a000000000334022f000000000343013f0000000002c200190000000002020433000000000232016f000000000021041b0000000101b0021000000001011001bf0000000d0400002900001f2f0000013d000000000105004b0000000c070000290000000e08000029000000070900002900001f260000613d00000000010b043300001f270000013d00000000010000190000000d040000290000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000000001a041b0000000001090433000000000201004b00001f470000613d00000000001004350000001101000029000000200010043f000000000100041400000e240210009c0000000001068019000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000000101043b000000000101041a000000000101004b00000e24060000410000000d040000290000000c070000290000000e08000029000023820000613d000000c00100043d0000000002010433000000000242004b000023720000a13d0000000b0110002900000020011000390000000000810435000000c00100043d0000000001010433000000000141004b000023720000a13d000000a00200043d0000000001020433000000000141004b000023720000a13d0000000b0100002900000020011000390000000002210019000000a00370003900000000030304330000000000320435000001000200043d000000200220003900000000020204330000000003020433000000000343004b000023720000a13d0000000001210019000000120300002900000000003104350000000002070433000000400100043d0000000000310435000000000300041400000e240430009c000000000306801900000e240410009c00000000010680190000004001100210000000c003300210000000000113019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000e8e0400004100000009060000290000000a07000029388b38810000040f00000001012001900000236a0000613d0000000d020000290000000102200039000000060120006c00000e240300004100001d980000413d00001f890000013d000000200200003900000e24060000410000000c070000290000000e0800002900000007090000290000001a0a0000290000000003b3004b00001f120000413d00001f1b0000013d000000a00800043d000000800d00043d000000e00c00043d000000c00b00043d000000001f0b04340000000102f0008c00001fa70000c13d0000000023080434000000000303004b000023720000613d0000000005010433000000000e0204330000000101000029000000000101043300000e260710019800001fe90000613d000000400b00043d00000000010e004b00180000000e001d000020730000613d00000e8f0100004100000000001b04350000000001000414000000040270008c000020760000c13d0000000103000031000000200130008c00000000040300190000002004008039000020b10000013d0000000101000029000000000101043300000e260910019800001fb90000613d000000400e00043d00000e8f0100004100000000001e04350000000001000414000000040290008c00190000000c001d001600000008001d001700000009001d0000200c0000c13d0000000103000031000000200130008c00000000040300190000002004008039000020450000013d00000000010f004b00001fc80000613d000000200180003900000000020804330000000003000019000000000432004b000023720000a13d000000050430021000000000044100190000000004040433000000000404004b000023880000c13d00000001033000390000000004f3004b00001fbe0000413d00000000010c004b000023250000613d00000000010d004b000000000e000019000023660000613d001a0000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000023270000c13d00000001020000390000000101000031000000000301004b000023360000c13d000023630000013d00000000010e004b000023880000c13d00000000010c004b000023250000613d00000000010d004b000000000e000019000023660000613d001a0000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000022f50000c13d00000001020000390000000101000031000000000301004b000023040000c13d000023630000013d00150000000f001d00180000000b001d001a0000000d001d00000e240200004100000e240310009c000000000102801900000e2403e0009c00000000020e40190000004002200210000000c001100210000000000121019f00000e35011001c7000000000209001900140000000e001d388b38860000040f000000140e0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f00000005064002720000202e0000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020260000413d000000000705004b0000203d0000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000001a0d000029000000180b000029000000150f000029000023de0000613d00000016080000290000001f01400039000000600110018f000000000ae1001900000000021a004b0000000002000019000000010200403900000e2b04a0009c0000236c0000213d00000001022001900000236c0000c13d0000004000a0043f000000200230008c0000236a0000413d00000000050e0433000000000205004b0000000002000019000000010200c039000000000225004b0000236a0000c13d00000000020f004b000020750000613d00000020028000390000000004080433000000000505004b000021300000613d0000000005000019000000000e000019000020640000013d00000001055000390000000006f5004b0000213c0000813d000000000654004b000023720000a13d000000050650021000000000062600190000000006060433000000000706004b000020610000613d00000000076d004b000023d60000413d000000000ee60019000000000d6d004900000001055000390000000006f5004b000020640000413d0000213c0000013d000000000a0b0019000020c90000013d0000213b0000013d001500000005001d00190000000c001d001a0000000d001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001600000007001d000000000207001900170000000b001d388b38860000040f000000170b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000020990000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020910000413d000000000705004b000020a80000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000001a0d000029000000180e000029000000190c000029000024230000613d000000160700002900000015050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c0000236c0000213d00000001011001900000236c0000c13d0000004000a0043f000000200130008c0000236a0000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b0000236a0000c13d000000000101004b000023910000613d0000000001ed004b000023d60000413d000000000ded004900000e960100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000020300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b0000210b0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b000021040000413d000000000231001900000000000204350000000002000414000000040370008c001a0000000d001d000021160000c13d0000000103000031000000200130008c00000000040300190000002004008039000021f50000013d00190000000c001d0000001f011000390000000f0110017f00000e240300004100000e2404a0009c00170000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f00000000020e004b000021ca0000613d00000e2d011001c7000080090200003900000000030e001900000000040700190000000005000019000021cb0000013d0000000005000019000000000654004b000023720000a13d000000050650021000000000062600190000000006060433000000000606004b000023910000c13d00000001055000390000000006f5004b000021310000413d000000000e000019001500000003001d00000e920200004100000000002a04350000000402a000390000004004000039000000000042043500000000040b04330000004405a0003900000000004504350000006405a0003900000005064002100000000007560019000000000604004b000021990000613d0000000006000019000021560000013d0000001f098000390000000f0990017f0000000008780019000000000008043500000000077900190000000106600039000000000846004b000000000a030019000000000b0f0019000021990000813d00000000030a00190000000008a70049000000640880008a0000000005850436000000200bb00039000000000f0b001900000000080b043300000000a90804340000000009970436000000000a0a04330000000000a904350000004009800039000000000909043300000e2b09900197000000400a70003900000000009a04350000006009800039000000000909043300000e2b09900197000000600a70003900000000009a04350000008009800039000000000909043300000e2b09900197000000800a70003900000000009a0435000000a0098000390000000009090433000000a00a70003900000000009a0435000000c009800039000000000909043300000e2609900197000000c00a70003900000000009a0435000000e009800039000000000909043300000e2609900197000000e00a70003900000000009a043500000100098000390000000009090433000000000909004b0000000009000019000000010900c039000001000a70003900000000009a0435000001200880003900000000080804330000012009700039000000020a0000290000000000a90435000001400a700039000000009808043400000000008a04350000016007700039000000000a08004b0000214c0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa00039000000000b8a004b000021910000413d0000214c0000013d00000000022700490000002404a000390000000000240435000000160800002900000000090804330000000002970436000000000509004b000021ac0000613d000000000500001900000015030000290000001704000029000000190b0000290000002008800039000000000608043300000000026204360000000105500039000000000695004b000021a50000413d000021af0000013d00000015030000290000001704000029000000190b0000290000000006000414000000040540008c001a0000000d001d00180000000e001d000022850000613d0000000001a2004900000e240200004100000e2403a0009c00160000000a001d000000000302001900000000030a4019000000400330021000000e240510009c00000000010280190000006001100210000000000131019f00000e240360009c0000000006028019000000c002600210000000000121019f00000000020e004b000022580000613d00000e2d011001c7000080090200003900000000030e00190000000005000019000022590000013d0000000002070019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000170a000029000021df0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000021d70000413d000000000705004b0000001a0d000029000000180e000029000000190c000029000021f10000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000023ef0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c0000236c0000213d00000001022001900000236c0000c13d000000400010043f000000200230008c0000236a0000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b0000236a0000c13d000000000202004b000023cc0000613d00000000010c004b000023660000613d00000000010d004b000023660000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000022270000c13d00000001020000390000000101000031000022340000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000180e000029000000000301004b000022f20000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000022550000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000224d0000413d000000000603004b000022e50000c13d000022f20000013d0000000002040019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000160a0000290000226d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000022650000413d000000000705004b0000001a0d000029000000180e000029000000190b0000290000227f0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000023ff0000613d0000001f01400039000000600110018f0000000002a10019000000000112004b0000000001000019000000010100403900000e2b0420009c0000236c0000213d00000001011001900000236c0000c13d000000400020043f000000200130008c0000236a0000413d00000000010a0433000000000301004b0000000003000019000000010300c039000000000331004b0000236a0000c13d000000000101004b000023ce0000613d00000000010b004b000023660000613d00000000010d004b000023660000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000022b50000c13d00000001020000390000000101000031000022c20000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000180e000029000000000301004b000022f20000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000022e30000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000022db0000413d000000000603004b000022f20000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000023660000c13d000023b70000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000023630000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000023220000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000231a0000413d000000000603004b000023560000c13d000023630000013d000000000e000019000023660000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000023630000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000023540000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000234c0000413d000000000603004b000023630000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000000000e000019000023b70000613d000001000100043d0000000000e10435000001000100043d000000000001042d00000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d00010430000000000001042f00000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e84020000410000238a0000013d000000400100043d00000e8d020000410000238a0000013d000000400100043d00000e85020000410000238a0000013d000000400100043d00000e9102000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e9101000041000023d70000013d00000e9e01000041000023cf0000013d000000400200043d0000001f0430018f0000000505300272000023a20000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000239a0000413d000000000604004b000024320000c13d0000243f0000013d000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d00010430000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d0001043000000e97020000410000238a0000013d00000e9501000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f0430018f00000000090300190000000505300272000023ec0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000023e40000413d000000000604004b0000240f0000c13d0000241c0000013d000000400200043d0000001f0430018f0000000505300272000023fc0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000023f40000413d000000000604004b0000243f0000613d000024320000013d000000400200043d0000001f0430018f000000000903001900000005053002720000240d0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024050000413d000000000604004b0000241c0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002900210000000000121019f0000388d00010430000000400200043d0000001f0430018f0000000505300272000024300000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024280000413d000000000604004b0000243f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300017000000000002000300000004001d001600000003001d000700000002001d000000400300043d00000e82020000410000000000230435001700000003001d0000000402300039001300000001001d000000000012043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000200000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f000000010220019000002a0f0000613d000000000201043b000000000100041400000e2602200197000000040320008c0000246a0000c13d000000030100036700000001030000310000247c0000013d00000e240300004100000e240410009c0000000001038019000000170500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e24033001970003000000010355000000010220019000002a5f0000613d00000017080000290000001f0230018f0000000504300272000024890000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000024810000413d000000000502004b000024980000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000a0020000000920000000a0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c00002a070000213d000000010220019000002a070000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b00002a0d0000613d000000000408043300000e2b0240009c00002a0d0000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b00002a0d0000c13d00000e6a0410009c00002a070000213d0000008004100039000000400040043f00000000540304340000000004410436000100000004001d000000000405043300000e260540009c00002a0d0000213d0000000105000029000000000045043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b00002a0d0000c13d000000400510003900000000004504350000006004300039000000000404043300000e2b0540009c00002a0d0000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b00002a0d0000c13d000000004303043400000e2b0530009c00002a070000213d0000001f053000390000000a0550017f0000003f055000390000000a0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c00002a070000213d000000010770019000002a070000c13d000000400060043f00000000063504360000000007430019000000000227004b00002a0d0000213d000000000203004b000025070000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b000025000000413d00000000023600190000000000020435000000600210003900000000005204350000000001010433000000000101004b00002a100000613d00000007010000290000000021010434000600000002001d000900000001001d00000e2b0110009c00002a070000213d000000090100002900000005011002100000003f0210003900000e6102200197000000400400043d0000000003240019001700000004001d000000000443004b0000000004000019000000010400403900000e2b0530009c00002a070000213d000000010440019000002a070000c13d000000400030043f000000170300002900000009040000290000000003430436001400000003001d000000000304004b000025480000613d00000060030000390000000004000019000000400500043d00000e830650009c00002a070000213d0000014006500039000000400060043f0000012006500039000000000036043500000100065000390000000000060435000000e0065000390000000000060435000000c0065000390000000000060435000000a0065000390000000000060435000000800650003900000000000604350000006006500039000000000006043500000040065000390000000000060435000000200650003900000000000604350000000000050435000000140640002900000000005604350000002004400039000000000514004b0000252b0000413d000000400300043d0000000002230019000800000003001d000000000332004b0000000003000019000000010300403900000e2b0420009c00002a070000213d000000010330019000002a070000c13d000000400020043f0000000802000029000000090300002900000000073204360000001f0210018f0000000501100272000025640000613d00000000030000310000000203300367000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000514004b0000255c0000413d000000000102004b000025660000613d000000090100006b001500000007001d000026560000613d000000160100002900120e260010019b000500040000003d000480100000003d000000000200001900000007010000290000000001010433000000000121004b00002a010000a13d001600000002001d0000000502200210001100000002001d00000006012000290000000001010433000b00000001001d0000000021010434000c00000002001d00000000001004350000000501000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000000402000029388b38860000040f000000010220019000002a0d0000613d000000000401043b000000000104041a000000000101004b00002a130000613d0000000106400039000000000106041a000000130110006c00002a100000c13d0000000505400039000000000105041a00000e2602100197000000120220006c00002a160000c13d00000e810110019800002a190000613d000d00000006001d000e00000005001d000f00000004001d0000000201400039001000000001001d000000000101041a00000e890110019800002a1c0000c13d00000e5b010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f000000010220019000002a0f0000613d000000000201043b000000800120021000000e89031001970000001005000029000000000105041a00000ea104100197000000000334019f000000000035041b000000400700043d00000e830370009c000000150600002900002a070000213d0000014003700039000000400030043f0000000f08000029000000000308041a00000000033704360000000d04000029000000000404041a00000e2b0220019700000080057000390000000000250435000000400210027000000e2b022001970000006005700039000000000025043500000e2b011001970000004002700039000000000012043500000000004304350000000301800039000000000101041a000000a00270003900000000001204350000000401800039000000000101041a00000e2601100197000000c00270003900000000001204350000000e01000029000000000101041a000000e00270003900000e26031001970000000000320435000001000270003900000e81011001980000000001000019000000010100c03900000000001204350000000601800039000000000201041a000000010320019000000001042002700000007f0840018f000000000804c0190000001f0480008c00000000040000190000000104002039000000000443004b00002a250000c13d000000400500043d0000000004850436000000000303004b000026070000613d000d00000004001d000e00000008001d000f00000005001d001000000007001d0000000000100435000000000100041400000e240210009c00000e2401008041000000c00110021000000e2c011001c70000801002000039388b38860000040f000000010220019000002a0d0000613d0000000e08000029000000000208004b0000260e0000613d000000000201043b0000000001000019000000150600002900000010070000290000000f050000290000000d090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000381004b000025ff0000413d000026120000013d000001000100008a000000000112016f0000000000140435000000000108004b00000020010000390000000001006019000026120000013d0000000001000019000000150600002900000010070000290000000f050000290000003f011000390000000a0210017f0000000001520019000000000221004b0000000002000019000000010200403900000e2b0310009c00002a070000213d000000010220019000002a070000c13d000000400010043f00000120017000390000000000510435000000170100002900000000010104330000001604000029000000000141004b000000110300002900002a010000a13d0000001401300029000000000071043500000017020000290000000002020433000000000242004b00002a010000a13d00000008020000290000000002020433000000000242004b00002a010000a13d00000000026300190000000c030000290000000003030433000000000032043500000017020000290000000002020433000000000242004b00002a010000a13d0000000001010433000000c00110003900000000020104330000000b010000290000000001010433000000400300043d0000000000130435000000000100041400000e240410009c00000e2405000041000000000105801900000e240430009c00000000030580190000004003300210000000c001100210000000000131019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000ea20400004100000012060000290000001307000029388b38810000040f000000010120019000002a0d0000613d00000016020000290000000102200039000000090120006c00000015070000290000256e0000413d0000001701000029000000000a0104330000000101a0008c000026720000c13d00000008010000290000000001010433000000000101004b00002a010000613d0000001401000029000000000501043300000000090704330000000101000029000000000101043300000e2608100198000026ad0000613d000000400b00043d000000000109004b000027320000613d00000e8f0100004100000000001b04350000000001000414000000040280008c000027360000c13d0000000103000031000000200130008c000000000403001900000020040080390000276e0000013d0000000101000029000000000101043300000e260f1001980000000802000029000026820000613d000000400b00043d00000e8f0100004100000000001b043500000000010004140000000402f0008c000026cc0000c13d0000000104000031000000200140008c00000000030400190000002003008039000027020000013d00000000010a004b000026900000613d00000000010204330000000002000019000000000321004b00002a010000a13d000000050320021000000000037300190000000003030433000000000303004b00002a2b0000c13d00000001022000390000000003a2004b000026860000413d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c000029c20000c13d00000001020000390000000101000031000000000301004b000029d10000c13d000029fe0000013d000000000109004b00002a2b0000c13d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c0000287e0000c13d00000001020000390000000101000031000000000301004b0000288d0000c13d000029fe0000013d00140000000a001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c700160000000f001d00000000020f001900130000000b001d388b38860000040f000000130b0000290000000003010019000000600330027000000e2404300197000000200340008c000000000304001900000020030080390000001f0530018f0000000506300272000026ed0000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000026e50000413d000000000705004b000026fc0000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000004001f00030000000103550000000102200190000000160f000029000000140a00002900002a830000613d0000001f01300039000000600110018f000000000eb1001900000000021e004b0000000002000019000000010200403900000e2b03e0009c00002a070000213d000000010220019000002a070000c13d0000004000e0043f000000200240008c00002a0d0000413d00000000030b0433000000000203004b0000000002000019000000010200c039000000000223004b00002a0d0000c13d00000000020a004b000027350000613d00000008020000290000000002020433000000000303004b000027ed0000613d000000000500001900000000030000190000001509000029000027220000013d00000001055000390000000006a5004b000027fa0000813d000000000652004b00002a010000a13d000000050650021000000000069600190000000006060433000000000706004b0000271f0000613d0000000308000029000000000768004b00002a2e0000413d0000000003360019000300000068005100000001055000390000000006a5004b000027220000413d000027fa0000013d000000000a0b00190000000307000029000027870000013d000027f90000013d001400000005001d001700000009001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001500000008001d000000000208001900160000000b001d388b38860000040f000000160b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000027580000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000027500000413d000000000705004b000027670000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000170900002900002ac60000613d000000150800002900000014050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c00002a070000213d000000010110019000002a070000c13d0000004000a0043f000000200130008c00002a0d0000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b00002a0d0000c13d000000000101004b00002a790000613d0000000307000029000000000197004b00002a7b0000413d000000000797004900000ea50100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000020300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b000027c90000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b000027c20000413d000000000231001900000000000204350000000002000414000000040380008c000300000007001d000027d40000c13d0000000103000031000000200130008c00000000040300190000002004008039000028d60000013d0000001f011000390000000a0110017f00000e240300004100000e2404a0009c00170000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f000000000209004b000028ae0000613d00000e2d011001c70000800902000039000000000309001900000000040800190000000005000019000028af0000013d00000000030000190000001506000029000000000532004b00002a010000a13d000000050530021000000000056500190000000005050433000000000505004b00002a300000c13d00000001033000390000000005a3004b000027ef0000413d000000000300001900000ea30200004100000000002e04350000000402e0003900000040050000390000000000520435000000170500002900000000050504330000004406e0003900000000005604350000006406e0003900000005075002100000000008670019000000000705004b000028550000613d0000000007000019000028120000013d0000001f0a9000390000000a0aa0017f0000000009890019000000000009043500000000088a00190000000107700039000000000957004b000028550000813d0000000009e80049000000640990008a000000000696043600000017090000290000002009900039001700000009001d000000000909043300000000ba090434000000000aa80436000000000b0b04330000000000ba0435000000400a900039000000000a0a043300000e2b0aa00197000000400b8000390000000000ab0435000000600a900039000000000a0a043300000e2b0aa00197000000600b8000390000000000ab0435000000800a900039000000000a0a043300000e2b0aa00197000000800b8000390000000000ab0435000000a00a900039000000000a0a0433000000a00b8000390000000000ab0435000000c00a900039000000000a0a043300000e260aa00197000000c00b8000390000000000ab0435000000e00a900039000000000a0a043300000e260aa00197000000e00b8000390000000000ab0435000001000a900039000000000a0a0433000000000a0a004b000000000a000019000000010a00c039000001000b8000390000000000ab043500000120099000390000000009090433000001200a800039000000020b0000290000000000ba0435000001400b80003900000000a909043400000000009b04350000016008800039000000000b09004b0000280a0000613d000000000b000019000000000c8b0019000000000dba0019000000000d0d04330000000000dc0435000000200bb00039000000000c9b004b0000284d0000413d0000280a0000013d00000000022800490000002405e000390000000000250435000000080200002900000000050204330000000002580436000000000605004b000028650000613d000000000600001900000008080000290000002008800039000000000708043300000000027204360000000106600039000000000756004b0000285f0000413d00000000050004140000000406f0008c000029620000613d0000000001e2004900000e240200004100000e2404e0009c00170000000e001d000000000402001900000000040e4019000000400440021000000e240610009c00000000010280190000006001100210000000000141019f00000e240450009c0000000005028019000000c002500210000000000121019f000000000203004b000029380000613d00000e2d011001c7000080090200003900000000040f00190000000005000019000029390000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000028ab0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000028a30000413d000000000603004b000029f10000c13d000029fe0000013d0000000002080019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000170a000029000028c30000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000028bb0000413d000000000705004b000028d20000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000002a930000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c00002a070000213d000000010220019000002a070000c13d000000400010043f000000200230008c00002a0d0000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b00002a0d0000c13d000000000202004b00002a6f0000613d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c000029080000c13d00000001020000390000000101000031000000000301004b000029170000c13d000029fe0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000029350000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000292d0000413d000000000603004b000029fe0000613d000029f10000013d00000000020f0019388b38810000040f0000000003010019000000600330027000000e2404300197000000200340008c000000000304001900000020030080390000001f0530018f0000000506300272000000170e0000290000294d0000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000029450000413d000000000705004b0000295c0000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000004001f0003000000010355000000010220019000002aa30000613d0000001f01300039000000600110018f0000000002e10019000000000112004b0000000001000019000000010100403900000e2b0320009c00002a070000213d000000010110019000002a070000c13d000000400020043f000000200140008c00002a0d0000413d00000000010e0433000000000301004b0000000003000019000000010300c039000000000331004b00002a0d0000c13d000000000101004b00002a710000613d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c000029920000c13d00000001020000390000000101000031000000000301004b000029a10000c13d000029fe0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000029bf0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000029b70000413d000000000603004b000029fe0000613d000029f10000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000029ef0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000029e70000413d000000000603004b000029fe0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b00002a4a0000613d000000000001042d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000000000001042f000000400100043d00000e9e0200004100002a1e0000013d000000400100043d00000e8d0200004100002a1e0000013d000000400100043d00000e9f0200004100002a1e0000013d000000400100043d00000e850200004100002a1e0000013d000000400100043d00000ea002000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e910200004100002a1e0000013d00000e900100004100002a310000013d00000e910100004100000000001e043500000e240100004100000e2402e0009c000000000e0180190000004001e0021000000e35011001c70000388d00010430000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d00010430000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d00010430000000400200043d0000001f0430018f000000050530027200002a6c0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a640000413d000000000604004b00002ad50000c13d00002ae20000013d00000ea60200004100002a1e0000013d00000ea401000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e910100004100002a7c0000013d00000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f0340018f000000050540027200002a900000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a880000413d000000000603004b00002ab20000c13d00002abf0000013d000000400200043d0000001f0430018f000000050530027200002aa00000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a980000413d000000000604004b00002ae20000613d00002ad50000013d000000400200043d0000001f0340018f000000050540027200002ab00000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002aa80000413d000000000603004b00002abf0000613d0000000505500210000000000151034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f000000000015043500000e240100004100000e240320009c000000000201801900000040012002100000006002400210000000000121019f0000388d00010430000000400200043d0000001f0430018f000000050530027200002ad30000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002acb0000413d000000000604004b00002ae20000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300018000000000002000100000005001d000400000004001d001700000003001d000800000002001d000000400300043d00000e82020000410000000000230435001800000003001d0000000402300039001500000001001d000000000012043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000300000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000030e20000613d000000000201043b000000000100041400000e2602200197000000040320008c00002b0e0000c13d0000000301000367000000010300003100002b200000013d00000e240300004100000e240410009c0000000001038019000000180500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e2403300197000300000001035500000001022001900000310b0000613d00000018080000290000001f0230018f000000050430027200002b2d0000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00002b250000413d000000000502004b00002b3c0000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000b0020000000920000000b0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c000030da0000213d0000000102200190000030da0000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b000030e00000613d000000000408043300000e2b0240009c000030e00000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b000030e00000c13d00000e6a0410009c000030da0000213d0000008004100039000000400040043f00000000540304340000000004410436000200000004001d000000000405043300000e260540009c000030e00000213d0000000205000029000000000045043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b000030e00000c13d000000400510003900000000004504350000006004300039000000000404043300000e2b0540009c000030e00000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b000030e00000c13d000000004303043400000e2b0530009c000030da0000213d0000001f053000390000000b0550017f0000003f055000390000000b0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c000030da0000213d0000000107700190000030da0000c13d000000400060043f00000000063504360000000007430019000000000227004b000030e00000213d000000000203004b00002bab0000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b00002ba40000413d00000000023600190000000000020435000000600210003900000000005204350000000001010433000000000101004b000030e30000613d00000008010000290000000021010434000700000002001d000a00000001001d00000e2b0110009c000030da0000213d0000000a0100002900000005011002100000003f0210003900000e6102200197000000400400043d0000000003240019001800000004001d000000000443004b0000000004000019000000010400403900000e2b0530009c000030da0000213d0000000104400190000030da0000c13d000000400030043f00000018030000290000000a040000290000000003430436001600000003001d000000000304004b00002bec0000613d00000060030000390000000004000019000000400500043d00000e830650009c000030da0000213d0000014006500039000000400060043f0000012006500039000000000036043500000100065000390000000000060435000000e0065000390000000000060435000000c0065000390000000000060435000000a0065000390000000000060435000000800650003900000000000604350000006006500039000000000006043500000040065000390000000000060435000000200650003900000000000604350000000000050435000000160640002900000000005604350000002004400039000000000514004b00002bcf0000413d000000400300043d0000000002230019000900000003001d000000000332004b0000000003000019000000010300403900000e2b0420009c000030da0000213d0000000103300190000030da0000c13d000000400020043f00000009020000290000000a0300002900000000073204360000001f0210018f000000050110027200002c080000613d00000000030000310000000203300367000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000514004b00002c000000413d000c00000007001d000000000102004b00002c0b0000613d0000000a0100006b00002cf60000613d000000170100002900140e260010019b000600040000003d000580100000003d000000000200001900000008010000290000000001010433000000000121004b000030d40000a13d001700000002001d0000000502200210001300000002001d00000007012000290000000001010433000d00000001001d0000000021010434000e00000002001d00000000001004350000000601000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000000502000029388b38860000040f0000000102200190000030e00000613d000000000401043b000000000104041a000000000101004b000030e60000613d0000000106400039000000000106041a000000150110006c000030e30000c13d0000000505400039000000000105041a00000e2602100197000000140220006c000030e90000c13d00000e8101100198000030ec0000613d000f00000006001d001000000005001d001100000004001d0000000201400039001200000001001d000000000101041a00000e8901100198000030ef0000c13d00000e5b010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000030e20000613d000000000201043b000000800120021000000e89031001970000001205000029000000000105041a00000ea104100197000000000334019f000000000035041b000000400600043d00000e830360009c000030da0000213d0000014003600039000000400030043f0000001107000029000000000307041a00000000033604360000000f04000029000000000404041a00000e2b0220019700000080056000390000000000250435000000400210027000000e2b022001970000006005600039000000000025043500000e2b011001970000004002600039000000000012043500000000004304350000000301700039000000000101041a000000a00260003900000000001204350000000401700039000000000101041a00000e2601100197000000c00260003900000000001204350000001001000029000000000101041a000000e00260003900000e26031001970000000000320435000001000260003900000e81011001980000000001000019000000010100c03900000000001204350000000601700039000000000201041a000000010320019000000001042002700000007f0740018f000000000704c0190000001f0470008c00000000040000190000000104002039000000000443004b000030f80000c13d000000400500043d0000000004750436000000000303004b00002ca90000613d000f00000004001d001000000007001d001100000005001d001200000006001d0000000000100435000000000100041400000e240210009c00000e2401008041000000c00110021000000e2c011001c70000801002000039388b38860000040f0000000102200190000030e00000613d0000001007000029000000000207004b00002cb00000613d000000000201043b0000000001000019000000120600002900000011050000290000000f080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000371004b00002ca10000413d00002cb30000013d000001000100008a000000000112016f0000000000140435000000000107004b0000002001000039000000000100601900002cb30000013d0000000001000019000000120600002900000011050000290000003f011000390000000b0210017f0000000001520019000000000221004b0000000002000019000000010200403900000e2b0310009c000030da0000213d0000000102200190000030da0000c13d000000400010043f00000120016000390000000000510435000000180100002900000000010104330000001704000029000000000141004b0000001303000029000030d40000a13d0000001601300029000000000061043500000018020000290000000002020433000000000242004b000030d40000a13d00000009020000290000000002020433000000000242004b000030d40000a13d0000000c023000290000000e030000290000000003030433000000000032043500000018020000290000000002020433000000000242004b000030d40000a13d0000000001010433000000c00110003900000000020104330000000d010000290000000001010433000000400300043d0000000000130435000000000100041400000e240410009c00000e2405000041000000000105801900000e240430009c00000000030580190000004003300210000000c001100210000000000131019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000ea20400004100000014060000290000001507000029388b38810000040f0000000101200190000030e00000613d000000170200002900000001022000390000000a0120006c00002c120000413d00000018010000290000000008010433000000010180008c00002d140000c13d00000009010000290000000001010433000000000101004b000030d40000613d000000160100002900000000050104330000000c01000029000000000d0104330000000201000029000000000101043300000e260710019800002d520000613d000000400b00043d00000000010d004b00170000000d001d00002dd90000613d00000e8f0100004100000000001b04350000000001000414000000040270008c00002ddc0000c13d0000000103000031000000200130008c0000000004030019000000200400803900002e130000013d0000000201000029000000000101043300000e260f100198000000090200002900002d240000613d000000400a00043d00000e8f0100004100000000001a043500000000010004140000000402f0008c00002d740000c13d0000000103000031000000200130008c0000000004030019000000200400803900002daa0000013d000000000108004b00002d320000613d00000000010204330000000002000019000000000321004b000030d40000a13d00000005032002100000000c033000290000000003030433000000000303004b000030fe0000c13d0000000102200039000000000382004b00002d280000413d000000010100006b0000307d0000613d000000040100006b000000000d0000190000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c000030800000c13d00000001020000390000000101000031000000000301004b0000308f0000c13d000030bc0000013d00000000010d004b000030fe0000c13d000000010100006b0000307d0000613d000000040100006b000000000d0000190000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c0000304d0000c13d00000001020000390000000101000031000000000301004b0000305c0000c13d000030bc0000013d001500000008001d00000e240200004100000e240310009c000000000102801900000e2403a0009c00000000020a40190000004002200210000000c001100210000000000121019f00000e35011001c700170000000f001d00000000020f001900160000000a001d388b38860000040f000000160a0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200002d950000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002d8d0000413d000000000705004b00002da40000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000170f000029000031410000613d00000015080000290000001f01400039000000600110018f000000000ea1001900000000021e004b0000000002000019000000010200403900000e2b04e0009c000030da0000213d0000000102200190000030da0000c13d0000004000e0043f000000200230008c000030e00000413d00000000040a0433000000000204004b0000000002000019000000010200c039000000000224004b000030e00000c13d000000000208004b00002ddb0000613d00000009020000290000000002020433000000000404004b00002e910000613d0000000004000019000000000d00001900002dc90000013d0000000104400039000000000584004b00002e9d0000813d000000000542004b000030d40000a13d00000005054002100000000c055000290000000005050433000000000605004b00002dc60000613d0000000407000029000000000657004b000031010000413d000000000dd5001900040000005700510000000104400039000000000584004b00002dc90000413d00002e9d0000013d000000000a0b001900002e2c0000013d00002e9c0000013d001500000005001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001600000007001d000000000207001900180000000b001d388b38860000040f000000180b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200002dfd0000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002df50000413d000000000705004b00002e0c0000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000170d000029000031710000613d000000160700002900000015050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c000030da0000213d0000000101100190000030da0000c13d0000004000a0043f000000200130008c000030e00000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b000030e00000c13d000000000101004b000031370000613d00000004020000290000000001d2004b000031390000413d0004000000d2005100000ea50100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000030300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b00002e6e0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b00002e670000413d000000000231001900000000000204350000000002000414000000040370008c00002e780000c13d0000000103000031000000200130008c0000000004030019000000200400803900002f4c0000013d0000001f011000390000000b0110017f00000e240300004100000e2404a0009c00180000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f00000000020d004b00002f230000613d00000e2d011001c7000080090200003900000000030d00190000000004070019000000000500001900002f240000013d0000000004000019000000000542004b000030d40000a13d00000005054002100000000c055000290000000005050433000000000505004b000031030000c13d0000000104400039000000000584004b00002e920000413d000000000d00001900000ea30200004100000000002e04350000000402e0003900000040040000390000000000420435000000180400002900000000040404330000004405e0003900000000004504350000006405e0003900000005064002100000000007560019000000000604004b00002ef80000613d000000000600001900002eb50000013d0000001f098000390000000b0990017f0000000008780019000000000008043500000000077900190000000106600039000000000846004b00002ef80000813d0000000008e70049000000640880008a000000000585043600000018080000290000002008800039001800000008001d000000000808043300000000a90804340000000009970436000000000a0a04330000000000a904350000004009800039000000000909043300000e2b09900197000000400a70003900000000009a04350000006009800039000000000909043300000e2b09900197000000600a70003900000000009a04350000008009800039000000000909043300000e2b09900197000000800a70003900000000009a0435000000a0098000390000000009090433000000a00a70003900000000009a0435000000c009800039000000000909043300000e2609900197000000c00a70003900000000009a0435000000e009800039000000000909043300000e2609900197000000e00a70003900000000009a043500000100098000390000000009090433000000000909004b0000000009000019000000010900c039000001000a70003900000000009a0435000001200880003900000000080804330000012009700039000000030a0000290000000000a90435000001400a700039000000009808043400000000008a04350000016007700039000000000a08004b00002ead0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa00039000000000b8a004b00002ef00000413d00002ead0000013d00000000022700490000002404e000390000000000240435000000090200002900000000040204330000000002470436000000000504004b00002f080000613d000000000500001900000009070000290000002007700039000000000607043300000000026204360000000105500039000000000645004b00002f020000413d00000000040004140000000405f0008c00170000000d001d00002fdb0000613d0000000001e2004900000e240200004100000e2403e0009c00180000000e001d000000000302001900000000030e4019000000400330021000000e240510009c00000000010280190000006001100210000000000131019f00000e240340009c0000000004028019000000c002400210000000000121019f00000000020d004b00002fb00000613d00000e2d011001c7000080090200003900000000030d001900000000040f0019000000000500001900002fb10000013d0000000002070019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000180a00002900002f380000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002f300000413d000000000705004b000000170d00002900002f480000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000031510000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c000030da0000213d0000000102200190000030da0000c13d000000400010043f000000200230008c000030e00000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b000030e00000c13d000000000202004b0000312d0000613d000000010100006b00000004010000290000304b0000613d000000000101004b0000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c00002f7f0000c13d0000000102000039000000010100003100002f8c0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000170d000029000000000301004b000030490000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200002fad0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00002fa50000413d000000000603004b0000303c0000c13d000030490000013d00000000020f0019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000180e00002900002fc50000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002fbd0000413d000000000705004b000000170d00002900002fd50000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000031610000613d0000001f01400039000000600110018f0000000002e10019000000000112004b0000000001000019000000010100403900000e2b0420009c000030da0000213d0000000101100190000030da0000c13d000000400020043f000000200130008c000030e00000413d00000000010e0433000000000301004b0000000003000019000000010300c039000000000331004b000030e00000c13d000000000101004b0000312f0000613d000000010100006b00000004010000290000304b0000613d000000000101004b0000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c0000300c0000c13d00000001020000390000000101000031000030190000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000170d000029000000000301004b000030490000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f0000000004140436000000030500036700000005011002720000303a0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000030320000413d000000000603004b000030490000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000030bf0000613d00000000010d0019000000000001042d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000030bc0000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f0000000004140436000000030500036700000005011002720000307a0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000030720000413d000000000603004b000030af0000c13d000030bc0000013d000000000d00001900000000010d0019000000000001042d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000030bc0000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000030ad0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000030a50000413d000000000603004b000030bc0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000000000d0000190000304b0000c13d000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d0001043000000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000000000001042f000000400100043d00000e9e02000041000030f10000013d000000400100043d00000e8d02000041000030f10000013d000000400100043d00000e9f02000041000030f10000013d000000400100043d00000e8502000041000030f10000013d000000400100043d00000ea002000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e9102000041000030f10000013d00000e9001000041000031040000013d00000e910100004100000000001e043500000e240100004100000e2402e0009c000000000e0180190000004001e0021000000e35011001c70000388d00010430000000400200043d0000001f0430018f0000000505300272000031180000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031100000413d000000000604004b000031800000c13d0000318d0000013d000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d0001043000000ea602000041000030f10000013d00000ea401000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e91010000410000313a0000013d00000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f0430018f00000005053002720000314e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031460000413d000000000604004b0000318d0000613d000031800000013d000000400200043d0000001f0430018f00000005053002720000315e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031560000413d000000000604004b0000318d0000613d000031800000013d000000400200043d0000001f0430018f00000005053002720000316e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031660000413d000000000604004b0000318d0000613d000031800000013d000000400200043d0000001f0430018f00000005053002720000317e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031760000413d000000000604004b0000318d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300002000000000002000100000002001d000200000001001d00000000001004350000000501000039000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f0000000102200190000031bb0000613d000000000101043b000000000201041a00000e2b03200198000031bd0000c13d000000010300002900000e2b0630019700000e5e02200197000000000262019f000000000021041b00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2d011001c70000800d02000039000000030300003900000e5f040000410000000205000029388b38810000040f0000000101200190000031bb0000613d000000000001042d00000000010000190000388d00010430000000400100043d00000e5d02000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d000104300003000000000002000100000003001d000300000002001d00000e2601100197000200000001001d00000000001004350000000601000039000000200010043f00000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e5c011001c70000801002000039388b38860000040f0000000102200190000031fd0000613d000000000101043b00000003020000290000000000200435000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f0000000102200190000031fd0000613d0000000306000029000000000101043b000000000201041a00000e2b03200198000031ff0000c13d000000010300002900000e2b0730019700000e5e02200197000000000272019f000000000021041b00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2d011001c70000800d02000039000000040300003900000e7a040000410000000205000029388b38810000040f0000000101200190000031fd0000613d000000000001042d00000000010000190000388d00010430000000400100043d00000e7902000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000ea70320009c000032540000813d00000005052002100000003f0350003900000e6104300197000000400300043d0000000004430019000000000634004b0000000006000019000000010600403900000e2b0740009c000032540000213d0000000106600190000032540000c13d000000400040043f00000000022304360000001f0450018f0000000505500272000032260000613d00000000060000310000000206600367000000000700001900000005087002100000000009820019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000321e0000413d000000000404004b000032280000613d0000000054010434000000000604004b0000324c0000613d00000000060000190000000007000019000032310000013d0000000106600039000000000846004b0000324c0000813d0000000008010433000000000868004b0000324e0000a13d00000005086002100000000008850019000000000808043300000000a9080434000000000b09004b0000322e0000613d000000000b000019000000000c080433000000000cbc004b0000324e0000a13d000000000c030433000000000c7c004b0000324e0000a13d000000050c700210000000000c2c0019000000050db00210000000000dda0019000000000d0d04330000000000dc04350000000107700039000000010bb00039000000000c9b004b0000323b0000413d0000322e0000013d0000000001030019000000000001042d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000ea80210009c0000325f0000413d000000400300003900000ea84210012a000032690000013d00000ea93210012a00000eaa0310009c000000000201a01900000eaa0310009c0000000003000019000000200300203900000eab0420009c00000010033081bf00000eac0220819700000eab4220812a00000ead0420009c000000080330803900000e2b0220819700000ead4220812a000027100420008c000000040330803900000e2402208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b0000000006000019000000010600403900000e2b0740009c000032a70000213d0000000106600190000032a70000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f0000000506600272000032960000613d0000000007000031000000020770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000328e0000413d000000000405004b000032980000613d00000000033200190000002103300039000000090510008c0000000a5110011a000000030550021000000eae0550021f00000eaf05500197000000010330008a000000000603043300000eb006600197000000000556019f00000000005304350000329a0000213d0000000001020019000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000500000000000200000e590100004100000000001004390000000001000412000400000001001d0000000400100443000000a001000039000300000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b00000e26011001970000000002000410000200000002001d000000000112004b000032f80000c13d00000e59010000410000000000100439000000040100002900000004001004430000008001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b000500000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000033550000613d000000000101043b000000050110006c000032f80000c13d00000e59010000410000000000100439000000040100002900000004001004430000006001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b000000000001042d000000400100043d000500000001001d000000200210003900000e3001000041000100000002001d000000000012043500000e5901000041000000000010043900000004010000290000000400100443000000c001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b00000005020000290000004002200039000000000012043500000e5901000041000000000010043900000004010000290000000400100443000000e0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b00000005020000290000006002200039000000000012043500000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000033550000613d000000000101043b0000000504000029000000a00240003900000002030000290000000000320435000000800240003900000000001204350000000301000029000000000014043500000e7f0140009c000033560000813d0000000503000029000000c001300039000000400010043f00000e2401000041000000010400002900000e240240009c00000000040180190000004002400210000000000303043300000e240430009c00000000030180190000006003300210000000000223019f000000000300041400000e240430009c0000000003018019000000c001300210000000000121019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000335c0000613d000000000101043b000000000001042d000000000001042f00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000b0000000000020000008002100039000600000002001d000000000202043300000e2b02200198000033770000613d000a00000002001d000b00000001001d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000035b40000613d000000000101043b00000e2b011001970000000a0110006b0000000b01000029000035ca0000413d0000002002100039000000000602043300000080026000390000000004020433000000200240003900000e240500004100000e240320009c00000000020580190000004002200210000000000404043300000e240340009c00000000040580190000006003400210000000000423019f00000040021000390000000002020433000200000002001d00000060026000390000000002020433000400000002001d00000020026000390000000002020433000b00000002001d00000040026000390000000002020433000a00000002001d0000000002010433000500000002001d0000006002100039000700000006001d0000000001060433000900000001001d000100000002001d0000000001020433000800000001001d000000000200041400000e240320009c0000000002058019000000c002200210000000000142019f00000e2d011001c70000801002000039388b38860000040f000000080300002900000e2604300197000000090300002900090e260030019b0000000a0300006b0000000003000019000000010300c039000800000003001d0000000b03000029000a0e2b0030019b0000000102200190000035b20000613d000000000101043b000300000001001d0000000701000029000000a0011000390000000001010433000700000001001d00000000004004350000000301000039000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039000b00000004001d388b38860000040f0000000b050000290000000102200190000035b20000613d000000000101043b000000000201041a000000010300008a000000000332004b000035c40000613d0000000103200039000000000031041b0000000601000029000000000101043300000e2b03100197000000400100043d0000016004100039000000000034043500000140031000390000000000230435000001200210003900000007030000290000000000320435000001000210003900000003030000290000000000320435000000e00210003900000004030000290000000000320435000000c00210003900000008030000290000000000320435000000a0021000390000000a030000290000000000320435000000800210003900000009030000290000000000320435000000600210003900000005030000290000000000320435000000400210003900000000005204350000016002000039000000000221043600000e6503000041000000000032043500000eb10310009c000035b50000813d0000018003100039000000400030043f00000e240400004100000e240320009c00000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000035b20000613d000000000101043b000900000001001d00000e590100004100000000001004390000000001000412000a00000001001d0000000400100443000000a001000039000800000001001d0000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b00000e26011001970000000002000410000700000002001d000000000112004b0000344d0000c13d00000e590100004100000000001004390000000a0100002900000004001004430000008001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b000b00000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b0110006c0000344d0000c13d00000e590100004100000000001004390000000a0100002900000004001004430000006001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000034a80000013d000000400100043d000b00000001001d000000200210003900000e3001000041000600000002001d000000000012043500000e590100004100000000001004390000000a010000290000000400100443000000c001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b020000290000004002200039000000000012043500000e590100004100000000001004390000000a010000290000000400100443000000e0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b020000290000006002200039000000000012043500000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b04000029000000a00240003900000007030000290000000000320435000000800240003900000000001204350000000801000029000000000014043500000e310140009c000035b50000213d0000000b03000029000000c001300039000000400010043f00000e2401000041000000060400002900000e240240009c00000000040180190000004002400210000000000303043300000e240430009c00000000030180190000006003300210000000000223019f000000000300041400000e240430009c0000000003018019000000c001300210000000000121019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000035b20000613d000000000101043b000000400200043d00000022032000390000000904000029000000000043043500000e680300004100000000003204350000000203200039000000000013043500000e2401000041000000000300041400000e240430009c000000000301801900000e240420009c00000000020180190000004001200210000000c002300210000000000121019f00000e69011001c70000801002000039388b38860000040f0000000102200190000035b20000613d000000000601043b00000001010000290000000008010433000000020300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c000035b50000213d0000008001700039000000400010043f0000000004070433000000410440008c000035270000c13d000000000303043300000e6b0430009c000035270000213d000900000008001d000b00000002001d0000000002050433000a00000009001d0000000004090433000800000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435000700000007001d000000a003700039000000f8022002700000000000230435000000000000043500000e2402000041000000000300041400000e240430009c000000000302801900000e240410009c00000000010280190000004001100210000000c002300210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f00000005044002720000350a0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000035030000413d000000000605004b000035180000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f000300000001035500000001022001900000000b020000290000000a090000290000000904000029000035cd0000613d000000000100043300000e260310019800000008060000290000000707000029000035270000613d000000000141013f00000e2601100198000035b10000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b0000353e0000613d000000000500001900000000064500190000000007950019000000000707043300000000007604350000002005500039000000000635004b000035370000413d000000000443001900000000000404350000001f03300039000000200700008a000000000373016f00000064043000390000000000480435000000a303300039000000000473016f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c000035b50000213d0000000104400190000035b50000c13d000000400030043f00000000030804330000000006000414000000040420008c000035860000c13d00000001020000390000000104000031000000000104004b0000359c0000613d00000e2b0140009c000035b50000213d0000001f01400039000000000171016f0000003f01100039000000000171016f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c000035b50000213d0000000105500190000035b50000c13d000000400010043f0000001f0540018f000000000143043600000003060003670000000504400272000035760000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b0000356e0000413d000000000705004b0000359e0000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000359e0000013d00000e240400004100000e240510009c0000000001048019000000400110021000000e240530009c00000000030480190000006003300210000000000113019f00000e240360009c0000000006048019000000c003600210000000000131019f000b00000007001d388b38860000040f0000000b07000029000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b000035580000c13d00000080010000390000006003000039000000000202004b000035bb0000613d0000000002030433000000200320008c000035bb0000413d00000e5703000041000000200420008c0000000004000019000000000403401900000e5702200197000000000502004b000000000300a01900000e570220009c000000000304c019000000000203004b000035b20000c13d000000000101043300000e6d0110009c000035bb0000c13d000000000001042d00000000010000190000388d00010430000000000001042f00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e7d02000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000001101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e7b02000041000035bd0000013d000000400200043d0000001f0430018f0000000505300272000035da0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000035d20000413d000000000604004b000035e90000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d00010430000900000000000200000000030100190000008001300039000900000001001d000000000101043300000e2b011001980000360a0000613d000700000001001d000800000003001d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000e2b01100197000000070110006b0000000803000029000038250000413d0000002001300039000000000101043300000040023000390000000002020433000400000002001d0000000012010434000700000002001d0000000001010433000500000001001d0000000001030433000800000001001d0000006001300039000300000001001d000000000101043300000e2601100197000600000001001d00000000001004350000000301000039000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000101043b000000000201041a000000010300008a000000000332004b0000381f0000613d0000000103200039000000000031041b0000000901000029000000000101043300000e2b03100197000000400100043d000000e0041000390000000000340435000000c0031000390000000000230435000000a00210003900000005030000290000000000320435000000800210003900000007030000290000000000320435000000600210003900000008030000290000000000320435000000400210003900000006030000290000000000320435000000e002000039000600000002001d000000000221043600000e6003000041000000000032043500000eb20310009c0000380e0000813d0000010003100039000000400030043f00000e240400004100000e240320009c00000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000101043b000700000001001d00000e590100004100000000001004390000000001000412000800000001001d0000000400100443000000a001000039000500000001001d0000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000e26011001970000000002000410000200000002001d000000000112004b000036a80000c13d00000e59010000410000000000100439000000080100002900000004001004430000008001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b000900000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f00000001022001900000380d0000613d000000000101043b000000090110006c000036a80000c13d00000e59010000410000000000100439000000080100002900000004001004430000006001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000037030000013d000000400100043d000900000001001d000000200210003900000e3001000041000100000002001d000000000012043500000e5901000041000000000010043900000008010000290000000400100443000000c001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000009020000290000004002200039000000000012043500000e590100004100000000001004390000000801000029000000040010044300000006010000290000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000009020000290000006002200039000000000012043500000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f00000001022001900000380d0000613d000000000101043b0000000904000029000000a00240003900000002030000290000000000320435000000800240003900000000001204350000000501000029000000000014043500000e310140009c0000380e0000213d0000000903000029000000c001300039000000400010043f00000e2401000041000000010400002900000e240240009c00000000040180190000004002400210000000000303043300000e240430009c00000000030180190000006003300210000000000223019f000000000300041400000e240430009c0000000003018019000000c001300210000000000121019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000101043b000000400200043d00000022032000390000000704000029000000000043043500000e680300004100000000003204350000000203200039000000000013043500000e2401000041000000000300041400000e240430009c000000000301801900000e240420009c00000000020180190000004001200210000000c002300210000000000121019f00000e69011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000601043b00000003010000290000000008010433000000040300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c0000380e0000213d0000008001700039000000400010043f0000000004070433000000410440008c000037820000c13d000000000303043300000e6b0430009c000037820000213d000700000008001d000900000002001d0000000002050433000800000009001d0000000004090433000600000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435000500000007001d000000a003700039000000f8022002700000000000230435000000000000043500000e2402000041000000000300041400000e240430009c000000000302801900000e240410009c00000000010280190000004001100210000000c002300210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000504400272000037650000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b0000375e0000413d000000000605004b000037730000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000000090200002900000008090000290000000704000029000038280000613d000000000100043300000e260310019800000006060000290000000507000029000037820000613d000000000141013f00000e26011001980000380c0000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b000037990000613d000000000500001900000000064500190000000007590019000000000707043300000000007604350000002005500039000000000635004b000037920000413d000000000443001900000000000404350000001f03300039000000200700008a000000000373016f00000064043000390000000000480435000000a303300039000000000473016f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c0000380e0000213d00000001044001900000380e0000c13d000000400030043f00000000030804330000000006000414000000040420008c000037e10000c13d00000001020000390000000104000031000000000104004b000037f70000613d00000e2b0140009c0000380e0000213d0000001f01400039000000000171016f0000003f01100039000000000171016f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c0000380e0000213d00000001055001900000380e0000c13d000000400010043f0000001f0540018f000000000143043600000003060003670000000504400272000037d10000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000037c90000413d000000000705004b000037f90000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000037f90000013d00000e240400004100000e240510009c0000000001048019000000400110021000000e240530009c00000000030480190000006003300210000000000113019f00000e240360009c0000000006048019000000c003600210000000000131019f000900000007001d388b38860000040f0000000907000029000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b000037b30000c13d00000080010000390000006003000039000000000202004b000038160000613d0000000002030433000000200320008c000038160000413d00000e5703000041000000200420008c0000000004000019000000000403401900000e5702200197000000000502004b000000000300a01900000e570220009c000000000304c019000000000203004b000038140000c13d000000000101043300000e6d0110009c000038160000c13d000000000001042d000000000001042f00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000000400100043d00000e7d02000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000001101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e7b02000041000038180000013d000000400200043d0000001f0430018f0000000505300272000038350000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000382d0000413d000000000604004b000038440000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d00010430000000000001042f00000e240300004100000e240410009c0000000001038019000000400110021000000e240420009c00000000020380190000006002200210000000000112019f000000000200041400000e240420009c0000000002038019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000038600000613d000000000101043b000000000001042d00000000010000190000388d0001043000000000050100190000000000200439000000050130008c000038700000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000631004b000038680000413d00000e2401000041000000000200041400000e240420009c000000000201801900000e240430009c00000000030180190000006001300210000000c002200210000000000112019f00000eb3011001c70000000002050019388b38860000040f0000000102200190000038800000613d000000000101043b000000000001042d000000000001042f00003884002104210000000102000039000000000001042d0000000002000019000000000001042d00003889002104230000000102000039000000000001042d0000000002000019000000000001042d0000388b000004320000388c0001042e0000388d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffc04541530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf312e332e30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000008b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000ffffffffffffff3f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace000000020000000000000000000000000000030000000100000000000000000011a1e6970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000084b0196d00000000000000000000000000000000000000000000000000000000cf190f3300000000000000000000000000000000000000000000000000000000e71ff36400000000000000000000000000000000000000000000000000000000f10b5cc700000000000000000000000000000000000000000000000000000000f10b5cc800000000000000000000000000000000000000000000000000000000f17325e700000000000000000000000000000000000000000000000000000000e71ff36500000000000000000000000000000000000000000000000000000000ed24911d00000000000000000000000000000000000000000000000000000000cf190f3400000000000000000000000000000000000000000000000000000000d45c443500000000000000000000000000000000000000000000000000000000e30bb56300000000000000000000000000000000000000000000000000000000a6d4dbc600000000000000000000000000000000000000000000000000000000a6d4dbc700000000000000000000000000000000000000000000000000000000b469318d00000000000000000000000000000000000000000000000000000000b83010d30000000000000000000000000000000000000000000000000000000084b0196e000000000000000000000000000000000000000000000000000000009541152500000000000000000000000000000000000000000000000000000000a3112a640000000000000000000000000000000000000000000000000000000044adc90d000000000000000000000000000000000000000000000000000000004d00306f000000000000000000000000000000000000000000000000000000004d0030700000000000000000000000000000000000000000000000000000000054fd4d500000000000000000000000000000000000000000000000000000000079f7573a0000000000000000000000000000000000000000000000000000000044adc90e0000000000000000000000000000000000000000000000000000000046926267000000000000000000000000000000000000000000000000000000004cb7e9e50000000000000000000000000000000000000000000000000000000017d7de7b0000000000000000000000000000000000000000000000000000000017d7de7c000000000000000000000000000000000000000000000000000000002d0335ab000000000000000000000000000000000000000000000000000000003c042715000000000000000000000000000000000000000000000000000000000eabf6600000000000000000000000000000000000000000000000000000000012b11a170000000000000000000000000000000000000000000000000000000013893f6180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000001200000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000000000000000000000000000000000000400000000000000000000000002e26794600000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000005aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000fffffffffffffedf000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076000000000000000000000000000000000000000000000000fffffffffffffe7f020000020000000000000000000000000000004400000000000000000000000019010000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a000000000000000000000000000000000000000800000000000000000000000001626ba7e00000000000000000000000000000000000000000000000000000000b3512b0c00000000000000000000000000000000000000000000000000000000290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000000000000000000000000000ffffffffffffffdf0f00000000000000000000000000000000000000000000000000000000000000756688fe0000000000000000000000000000000000000000000000000000000057b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb72e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffd7f4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ec9d6eeb0000000000000000000000000000000000000000000000000000000092a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22291ab7da6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffeff8baa579f00000000000000000000000000000000000000000000000000000000947d5a8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000fffffffffffffec00000000000000000000000ff0000000000000000000000000000000000000000a2ea7c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf08e8b93700000000000000000000000000000000000000000000000000000000157bd4c3000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000c5723b51000000000000000000000000000000000000000000000000000000008bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35ce46e0460000000000000000000000000000000000000000000000000000000011011294000000000000000000000000000000000000000000000000000000001574f9f30000000000000000000000000000000000000000000000000000000091db0b7e000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f390200000200000000000000000000000000000024000000000000000000000000e8bee83900000000000000000000000000000000000000000000000000000000e60c350500000000000000000000000000000000000000000000000000000000bd8ba84d000000000000000000000000000000000000000000000000000000006563697069656e74206d61792068617665207265766572746564000000000000416464726573733a20756e61626c6520746f2073656e642076616c75652c207208c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000416464726573733a20696e73756666696369656e742062616c616e63650000000000000000000000000000000000000000000064000000000000000000000000bf37b20e000000000000000000000000000000000000000000000000000000004ca8886700000000000000000000000000000000000000000000000000000000905e710700000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000fffffffffffffffffffffffffffffffff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f61588e5b2d900000000000000000000000000000000000000000000000000000000bf2f3a8b00000000000000000000000000000000000000000000000000000000e49617e100000000000000000000000000000000000000000000000000000000ccf3bb270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffe80000000000000000000000000000000000000000000000000ffffffffffffff000200000200000000000000000000000000000000000000000000000000000000a71f2fe062852ae73ce9c72ae4946b8ab9d018748c141964c3a3acbfc4074113\",\n  \"entries\": [\n    {\n      \"constructorArgs\": [\"0xB8566376dFe68B76FA985D5448cc2FbD578412a2\"],\n      \"salt\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n      \"deploymentType\": \"create\",\n      \"factoryDeps\": [],\n      \"address\": \"0x21d8d4eE83b80bc0Cc0f2B7df3117Cf212d02901\",\n      \"txHash\": \"0xf4723f534cef07491c27a544a629b7454e2abe3d1826ffc72ae928be623dffdc\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/zksync/EIP712Proxy.json",
    "content": "{\n  \"address\": \"0x8E8F79e9A1Cd4da7bD2f15e5B0a4B4a613E37C5a\",\n  \"sourceName\": \"contracts/eip712/proxy/EIP712Proxy.sol\",\n  \"contractName\": \"EIP712Proxy\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AccessDenied\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DeadlineExpired\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidLength\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidShortString\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"NotFound\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"str\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StringTooLong\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"UsedSignature\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"EIP712DomainChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyAttestationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"attestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"eip712Domain\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes1\",\n          \"name\": \"fields\",\n          \"type\": \"bytes1\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"version\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"chainId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifyingContract\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"salt\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"extensions\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAttestTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getAttester\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getDomainSeparator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getName\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getRevokeTypeHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"recipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint64\",\n                  \"name\": \"expirationTime\",\n                  \"type\": \"uint64\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"revocable\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"refUID\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"data\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct AttestationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"attester\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyAttestationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiAttestByDelegation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData[]\",\n              \"name\": \"data\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature[]\",\n              \"name\": \"signatures\",\n              \"type\": \"tuple[]\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct MultiDelegatedProxyRevocationRequest[]\",\n          \"name\": \"multiDelegatedRequests\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"multiRevokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"schema\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"uid\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"value\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevocationRequestData\",\n              \"name\": \"data\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint8\",\n                  \"name\": \"v\",\n                  \"type\": \"uint8\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"r\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"s\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Signature\",\n              \"name\": \"signature\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"revoker\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint64\",\n              \"name\": \"deadline\",\n              \"type\": \"uint64\"\n            }\n          ],\n          \"internalType\": \"struct DelegatedProxyRevocationRequest\",\n          \"name\": \"delegatedRequest\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"revokeByDelegation\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"bytecode\": \"0x0004000000000002002600000000000200000000030100190000006004300270000005e60340019700030000003103550002000000010355000005e60040019d0000000102200190000000220000c13d0000008002000039001e00000002001d000000400020043f000000040230008c0000004b0000413d000000000201043b000000e002200270000005f70420009c0000004d0000213d000005ff0420009c000000a30000213d000006030420009c000001250000613d000006040420009c000002490000613d000006050120009c0000004b0000c13d0000000001000416000000000101004b0000004b0000c13d0000061601000041000000800010043f0000060801000041000017950001042e000001e002000039000000400020043f0000000002000416000000000202004b0000004b0000c13d0000001f02300039000005e702200197000001e002200039000000400020043f0000001f0230018f0000000504300272000000370000613d00000000050000190000000506500210000000000761034f000000000707043b000001e00660003900000000007604350000000105500039000000000645004b0000002f0000413d000000000502004b000000460000613d0000000504400210000000000141034f0000000302200210000001e004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f0000000000140435000000400130008c0000004b0000413d000001e00700043d000005e80170009c000000f90000a13d00000000010000190000179600010430000005f80420009c000001130000213d000005fc0420009c000001930000613d000005fd0420009c0000025b0000613d000005fe0220009c0000004b0000c13d000000240230008c0000004b0000413d0000000402100370000000000202043b000200000002001d000005e90220009c0000004b0000213d00000002020000290000002302200039000000000232004b0000004b0000813d00000002020000290000000402200039000000000221034f000000000202043b000100000002001d000005e90220009c0000004b0000213d0000000202000029000400240020003d000000010200002900000005022002100000000404200029000000000434004b0000004b0000213d0000003f042000390000061004400197000006110540009c0000010d0000213d0000008007400039000000400070043f0000000105000029000000800050043f000000000505004b000006050000c13d001d00000007001d0000061c01000041000000000017043500000004017000390000002002000039001600000002001d00000000002104350000002402700039000000800100043d0000000000120435000000440270003900000005031002100000000005230019001c00000001001d000000000301004b000006340000c13d000000000f050019001e0000000f001d000006090100004100000000001004390000000001000412000000040010044300000140010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000003000416000000010220019000000e470000613d000000000201043b0000000001000414000005e804200197000000040240008c000006920000c13d0000000301000367000000010300003100000e720000013d000006000420009c000001a10000613d000006010420009c0000028f0000613d000006020120009c0000004b0000c13d0000000001000416000000000101004b0000004b0000c13d0000000001000412001e00000001001d002600000001001d002500000000001d0000800501000039001d00000001001d0000004403000039001c00000003001d0000000004000415000000260440008a000000050440021000000609020000411794176b0000040f179411a90000040f0024001e0000002d002300200000003d001b00000001001d0000000004000415000000240440008a00000005044002100000001d0100002900000609020000410000001c030000291794176b0000040f179411a90000040f0022001e0000002d002100400000003d001a00000001001d0000000004000415000000220440008a00000005044002100000001d0100002900000609020000410000001c030000291794176b0000040f179411a90000040f0000001b0200002900000020042000390000000003020433001d00000003001d001b00000001001d000000400100043d001e00000001001d00000020021000390000000001040019179411760000040f00000624030000410000001d020000290000001e04200029001900000004001d000000200140003900000000003104350000001a0200002900000020012000390000000003020433001c00000003001d0000002102400039179411760000040f00000019020000290000001c0120002900000021021000390000062403000041000000000032043500000022021000390000001b0300002900000020013000390000000003030433001b00000003001d179411760000040f0000001c020000290000001d012000290000001b0310002900000002023000390000001e0100002900000000002104350000002202300039000004dc0000013d000002000200043d000005e90120009c0000004b0000213d0000001f01200039000005ea04000041000000000531004b00000000050000190000000005048019000005ea01100197000000000601004b0000000004008019000005ea0110009c000000000405c019000000000104004b0000004b0000c13d001e00000007001d000001e0012000390000000001010433000005e90410009c0000043d0000a13d000006270100004100000000001004350000004101000039000000040010043f00000628010000410000179600010430000005f90420009c000001b60000613d000005fa0120009c000004360000613d000005fb0120009c0000004b0000c13d0000000001000416000000000101004b0000004b0000c13d179411fc0000040f000000400200043d0000000000120435000005e601000041000005e60320009c0000000002018019000000400120021000000606011001c7000017950001042e000000240230008c0000004b0000413d0000000402100370000000000202043b000800000002001d000005e90220009c0000004b0000213d00000008020000290000002302200039000000000232004b0000004b0000813d00000008020000290000000402200039000000000121034f000000000101043b000700000001001d000005e90110009c0000004b0000213d0000000801000029000a00240010003d000000070100002900000005011002100000000a02100029000000000232004b0000004b0000213d0000003f021000390000061003200197000006110230009c0000010d0000213d0000008002300039000000400020043f0000000704000029000000800040043f000000000404004b000006170000c13d0000000001000412001d00000001001d000006090100004100000000001004390000001d01000029000000040010044300000140010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000060b020000410000000000200439000005e801100197001e00000001001d00000004001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060c011001c700008002020000391794178f0000040f000000010220019000000e470000613d000000000101043b000000000101004b0000004b0000613d000000400300043d000006340100004100000000001304350000000401300039000000200200003900000000002104350000002401300039000000800200043d0000000000210435001d00000003001d000000440330003900000005012002100000000001310019000000000402004b00000f1e0000c13d000000000200041400000000030004160000001e04000029000000040440008c00000f4d0000613d0000001d060000290000000001610049000005e604000041000005e60560009c000000000504001900000000050640190000004005500210000005e60610009c00000000010480190000006001100210000000000151019f000005e60520009c0000000002048019000000c002200210000000000121019f000000000203004b00000f410000c13d0000001e0200002900000f450000013d0000000001000416000000000101004b0000004b0000c13d0000000001000412002000000001001d001f01400000003d000080050100003900000044030000390000000004000415000000200440008a000000050440021000000609020000411794176b0000040f000002570000013d0000000001000416000000000101004b0000004b0000c13d0000000203000039000000000203041a000000010420019000000001052002700000007f0150018f000000000105c0190000001f0510008c00000000050000190000000105002039000000000552013f0000000105500190000004b40000613d000006270100004100000000001004350000002201000039000000040010043f00000628010000410000179600010430000001040230008c0000004b0000413d0000000402100370000000000202043b001e00000002001d000000800020043f0000002402100370000000000202043b000001200020043f0000004402100370000000000202043b000001400020043f0000012002000039000000a00020043f000001c002000039000000400020043f0000006402100370000000000202043b000000ff0320008c0000004b0000213d000001600020043f0000008402100370000000000202043b000001800020043f000000a402100370000000000202043b000001a00020043f0000016002000039000000c00020043f000000c402100370000000000202043b000005e80320009c0000004b0000213d000000e00020043f000000e401100370000000000101043b000005e90210009c0000004b0000213d000001000010043f00000080010000391794150b0000040f000006090100004100000000001004390000000001000412000000040010044300000140010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b001c05e80010019b000000400100043d001d00000001001d000005eb0110009c0000010d0000213d0000001d020000290000004001200039000000400010043f0000001e010000290000000001120436001e00000001001d000005ea010000410000000002000031000000640320008c00000000030000190000000003014019000005ea02200197000000000402004b000000000100a019000005ea0220009c000000000103c019000000000101004b0000004b0000c13d000000400100043d000005eb0210009c0000010d0000213d0000004002100039000000400020043f00000002020003670000002403200370000000000303043b00000000033104360000004402200370000000000202043b00000000002304350000001e0200002900000000001204350000060b0100004100000000001004390000001c010000290000000400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060c011001c700008002020000391794178f0000040f000000010220019000000e470000613d000000000101043b000000000101004b0000004b0000613d000000400400043d0000060d0100004100000000001404350000001d010000290000000001010433000000040240003900000000001204350000001e0100002900000000010104330000000021010434000000240340003900000000001304350000000001020433001e00000004001d00000044024000390000000000120435000000000300041600000000010004140000001c02000029000000040220008c00000f9c0000613d000005e602000041000005e60410009c00000000010280190000001e05000029000005e60450009c00000000020540190000004002200210000000c001100210000000000121019f000000000203004b00000f900000c13d0000060f011001c70000001c0200002900000f940000013d0000000002000416000000240330008c0000004b0000413d000000000202004b0000004b0000c13d0000000401100370000000000101043b00000000001004350000000301000039000000200010043f00000040020000390000000001000019179417550000040f000000000101041a000005e801100197000000800010043f0000060801000041000017950001042e0000000001000416000000000101004b0000004b0000c13d000006090100004100000000001004390000000001000412001e00000001001d000000040010044300000100010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000400700043d000000000101043b000000ff0210008c000004c30000c13d000000000300041a000000010430019000000001023002700000007f0120018f000000000102c0190000001f0210008c00000000020000190000000102002039000000000223013f0000000102200190000001b00000c13d0000000002170436000000000404004b000005450000613d0000000000000435000000000301004b00000000030000190000054b0000613d000006200400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000513004b000002870000413d0000054b0000013d000000240230008c0000004b0000413d0000000402100370000000000202043b001e00000002001d000005e90220009c0000004b0000213d0000001e0230006a000005ea04000041000000e40520008c00000000050000190000000005044019000005ea02200197000000000602004b000000000400a019000005ea0220009c000000000405c019000000000204004b0000004b0000c13d0000001e0200002900000004052000390000012002000039000000400020043f0000002004500039000000000441034f001d00000005001d000000000551034f000000000505043b001c00000005001d000000800050043f000000000404043b000005e90540009c0000004b0000213d0000001d064000290000000004630049000005ea05000041000000c00740008c00000000070000190000000007054019000005ea04400197000000000804004b000000000500a019000005ea0440009c000000000507c019000000000405004b0000004b0000c13d000001e004000039000000400040043f000000000561034f000000000505043b000005e80750009c0000004b0000213d000001200050043f0000002005600039000000000751034f000000000707043b000005e90870009c0000004b0000213d000001400070043f0000002005500039000000000751034f000000000707043b000000000807004b0000000008000019000000010800c039000000000887004b0000004b0000c13d000001600070043f0000002007500039000000000771034f000000000707043b000001800070043f0000004005500039000000000751034f000000000707043b000005e90870009c0000004b0000213d00000000076700190000001f06700039000000000636004b0000004b0000813d000000000671034f000000000606043b000005e90860009c0000010d0000213d0000001f08600039001b0020000000920000001b0880017f0000003f088000390000001b0880017f000006250980009c0000010d0000213d000001e008800039000000400080043f000001e00060043f00000020077000390000000008760019000000000838004b0000004b0000213d000000000771034f0000001f0860018f0000000509600272000002ff0000613d000000000a000019000000050ba00210000000000cb7034f000000000c0c043b000002000bb000390000000000cb0435000000010aa00039000000000b9a004b000002f70000413d000000000a08004b0000030e0000613d0000000509900210000000000797034f00000003088002100000020009900039000000000a090433000000000a8a01cf000000000a8a022f000000000707043b0000010008800089000000000787022f00000000078701cf0000000007a7019f00000000007904350000001e0700002900000044077000390000000003730049000005ea08000041000000600930008c00000000090000190000000009084019000005ea03300197000000000a03004b000000000800a019000005ea0330009c000000000809c01900000200036000390000000000030435000001a00040043f0000002003500039000000000331034f000000000303043b000001c00030043f000000a00020043f000000000208004b0000004b0000c13d000000400200043d000006130320009c0000010d0000213d0000006003200039000000400030043f000000000371034f000000000303043b000000ff0430008c0000004b0000213d00000000033204360000002004700039000000000441034f000000000404043b00000000004304350000004003700039000000000331034f000000000303043b00000040042000390000000000340435000000c00020043f0000006002700039000000000321034f000000000303043b000005e80430009c0000004b0000213d000000e00030043f001a00200020003d0000001a01100360000000000101043b000005e90210009c0000004b0000213d000001000010043f0000008001000039179412ad0000040f00000000050000310000001e0150006a000000c30210008a0000001a01000029000000a00310008a0000000201000367000000000331034f000000000303043b000005ea04000041000000000623004b00000000060000190000000006048019000005ea02200197000005ea07300197000000000827004b0000000004008019000000000227013f000005ea0220009c000000000406c019000000000204004b0000004b0000c13d000000400200043d000005eb0420009c0000010d0000213d0000001d073000290000004003200039000000400030043f0000001c0300002900000000033204360000000004750049000005ea06000041000000c00840008c00000000080000190000000008064019000005ea04400197000000000904004b000000000600a019000005ea0440009c000000000608c019000000000406004b0000004b0000c13d000000400400043d000005f20640009c0000010d0000213d000000c006400039000000400060043f000000000671034f000000000606043b000005e80860009c0000004b0000213d00000000086404360000002006700039000000000961034f000000000909043b000005e90a90009c0000004b0000213d00000000009804350000002006600039000000000861034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004b0000c13d000000400940003900000000008904350000002008600039000000000881034f000000000808043b000000600940003900000000008904350000004006600039000000000861034f000000000808043b000005e90980009c0000004b0000213d000000000a7800190000001f07a00039000005ea08000041000000000957004b00000000090000190000000009088019000005ea07700197000005ea0b500197000000000cb7004b00000000080080190000000007b7013f000005ea0770009c000000000809c019000000000708004b0000004b0000c13d0000000007a1034f000000000707043b000005e90870009c0000010d0000213d0000001f087000390000001b0880017f0000003f088000390000001b0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b004039000005e90c90009c0000010d0000213d000000010bb001900000010d0000c13d000000400090043f0000000009780436000000200aa00039000000000ba7001900000000055b004b0000004b0000213d000000000aa1034f0000001f0570018f000000050b700272000003c60000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000003be0000413d000000000c05004b000003d50000613d000000050bb00210000000000aba034f000000000bb900190000000305500210000000000c0b0433000000000c5c01cf000000000c5c022f000000000a0a043b0000010005500089000000000a5a022f00000000055a01cf0000000005c5019f00000000005b043500000000057900190000000000050435000000800540003900000000008504350000002005600039000000000151034f000000000101043b000000a005400039000000000015043500000000004304350000062601000041000000400500043d000000000015043500000020010000390000000404500039000000000014043500000000010204330000002402500039000000000012043500000000010304330000004002000039000000440350003900000000002304350000000032010434000005e802200197000000640450003900000000002404350000000002030433000005e9022001970000008403500039000000000023043500000040021000390000000002020433000000000202004b0000000002000019000000010200c039000000a403500039000000000023043500000060021000390000000002020433000000c403500039000000000023043500000080021000390000000002020433000000c003000039000000e4045000390000000000340435000001240350003900000000240204340000000000430435001c00000005001d0000014403500039001d00000004001d000000000404004b000004140000613d0000000004000019000000000534001900000000064200190000000006060433000000000065043500000020044000390000001d0540006c0000040d0000413d0000001d0230002900000000000204350000001c020000290000010402200039000000a00110003900000000010104330000000000120435000006090100004100000000001004390000000001000412000000040010044300000140010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000003000416000000010220019000000e470000613d000000000201043b0000000001000414000005e804200197000000040240008c000010fb0000c13d0000000103000031000000200130008c000000000403001900000020040080390000113a0000013d0000000001000416000000000101004b0000004b0000c13d0000060701000041000000800010043f0000060801000041000017950001042e0000001f04100039001c0020000000920000001c0440017f0000003f044000390000001c0440017f000000400500043d0000000004450019001d00000005001d000000000554004b00000000050000190000000105004039000005e90640009c0000010d0000213d00000001055001900000010d0000c13d000001e003300039000000400040043f0000001d040000290000000004140436001b00000004001d00000200022000390000000004210019000000000334004b0000004b0000213d000000000301004b0000001b06000029000004600000613d000000000300001900000000046300190000000005230019000000000505043300000000005404350000002003300039000000000413004b000004590000413d00000000011600190000000000010435000000400100043d001a00000001001d000005eb0110009c0000010d0000213d0000001a040000290000004001400039000000400010043f00000005010000390000000005140436000005ec0100004100000000001504350000000101000039001800000001001d000000800010043f0000000301000039000000a00010043f000000c00000043f0000001d060000290000000007060433000000200170008c001900000005001d000004f80000413d001700000007001d000005e90170009c0000010d0000213d000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000001b00000c13d001600000003001d000000200130008c000004a20000413d0000000000000435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000201043b00000017010000290000001f011000390000000501100270000000000112001900000016030000290000001f0330003900000005033002700000000002320019000000000321004b000004a20000813d000000000001041b0000000101100039000000000321004b0000049e0000413d0000000000000435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d00000017030000290000001c03300180000000000101043b00000e480000c13d00000020020000390000001d0600002900000e530000013d000000800010043f000000000404004b000004bc0000613d0000000000300435000000000201004b000004ce0000c13d000000a001000039000004d90000013d000001000300008a000000000232016f000000a00020043f000000000101004b000000c001000039000000a001006039000004d90000013d000000ff0210018f000000200320008c000004ee0000413d0000061f010000410000000000170435000005e601000041000005e60270009c00000000070180190000004001700210000005f6011001c70000179600010430000005f30200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000514004b000004d00000413d000000c001300039000000800210008a0000008001000039001e00000001001d179411960000040f0000002001000039000000400200043d001d00000002001d00000000021204360000001e01000029179411830000040f0000001d040000290000000001410049000005e602000041000005e60310009c0000000001028019000005e60340009c000000000402801900000040024002100000006001100210000000000121019f000017950001042e001d00000007001d000005eb0370009c0000010d0000213d0000001d040000290000004003400039000000400030043f000000200340003900000000001304350000000000240435000005580000013d00000003017002100000010001100089000000010200008a00000000011201cf000000000207004b00000000010060190000001b030000290000000002030433000000000112016f000000000171019f000001800010043f0000000004040433000000200140008c000005840000413d001700000004001d000005e90140009c0000010d0000213d0000000104000039000000000104041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000001b00000c13d001500000003001d000000200130008c001600000004001d000005340000413d0000000000400435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000201043b00000017010000290000001f011000390000000501100270000000000112001900000015030000290000001f0330003900000005033002700000000002320019000000000321004b0000001604000029000005340000813d000000000001041b0000000101100039000000000321004b000005300000413d0000000000400435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d00000017030000290000001c03300180000000000101043b00000eff0000c13d000000200200003900000f0a0000013d000001000400008a000000000343016f0000000000320435000000000101004b000000200300003900000000030060190000003f01300039000000200200008a000000000221016f001d00000007001d0000000001720019000000000221004b00000000020000190000000102004039000005e90310009c0000010d0000213d00000001022001900000010d0000c13d000000400010043f000006090100004100000000001004390000001e01000029000000040010044300000120010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000400200043d000000000101043b000000ff0310008c000006290000c13d0000000105000039000000000405041a000000010740019000000001014002700000007f0610018f00000000010660190000001f0310008c00000000030000190000000103002039000000000334013f00000001033001900000001d08000029000001b00000c13d0000000003120436000000000707004b001d00000008001d00000dcd0000c13d000001000100008a000000000114016f0000000000130435000000000106004b0000002004000039000000000400601900000dda0000013d00000003014002100000010001100089000000010200008a00000000011201cf000000000204004b00000000010060190000000002050433000000000112016f000000000141019f000001a00010043f000005e604000041000005e60130009c0000000001040019000000000103401900000040011002100000000002060433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001700000001001d000001400010043f0000001902000029000005e60120009c000005e604000041000000000204801900000040012002100000001a020000290000000002020433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001a00000001001d000001600010043f000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000201043b000001000020043f000000400100043d0000008003100039000000000023043500000060021000390000001a030000290000000000320435000000400210003900000017030000290000000000320435000000a002000039001900000002001d0000000002210436000000a0031000390000000004000410001a00000004001d0000000000430435000005f1030000410000000000320435000005f20310009c0000010d0000213d000000c003100039001700000003001d000000400030043f000005e603000041000005e60420009c000000000203801900000040022002100000000001010433000005e60410009c00000000010380190000006001100210000000000121019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000001e020000290000004b0000613d000000000101043b000000e00010043f0000001a03000029000001200030043f000005e80220019800000f640000c13d000005f50100004100000017030000290000000000130435000005e601000041000005e60230009c00000000030180190000004001300210000005f6011001c70000179600010430000005f20440009c0000010d0000213d000000600600003900000000040000190000004005700039000000400050043f000000200570003900000000006504350000000000070435000000a00540003900000000007504350000002004400039000000000524004b000006a50000813d000000400700043d000005eb0570009c000006090000a13d0000010d0000013d000005f20330009c0000010d0000213d000000600500003900000000030000190000004004200039000000400040043f000000200420003900000000005404350000000000020435000000a00430003900000000002404350000002003300039000000000213004b00000ac80000813d000000400200043d000005eb0420009c0000061b0000a13d0000010d0000013d000000ff0310018f000000200430008c000006890000413d0000061f010000410000000000120435000005e601000041000005e60320009c00000000020180190000004001200210000005f6011001c70000179600010430001b00400000003d00000000040000190000063b0000013d00000001044000390000001c0140006c00000000050f0019000000890000813d0000001d0650006a000000440660008a00000000026204360000001e010000290000002001100039001e00000001001d00000000060104330000000076060434000000000865043600000000060704330000001b01000029000000000018043500000040085000390000000007060433000000000078043500000060085000390000000509700210000000000f890019000000000907004b000006370000613d00000000090000190000065e0000013d0000000001bc00190000000000010435000000a001300039000000a00aa00039000000000a0a04330000000000a104350000001f01c00039000000200a00008a0000000001a1016f000000000fb100190000000109900039000000000179004b000006370000813d000000000a5f0049000000600aa0008a0000000008a804360000002006600039000000000a06043300000000cb0a0434000005e80bb00197000000000bbf0436000000000c0c0433000005e90cc001970000000000cb0435000000400ba00039000000000b0b0433000000000b0b004b000000000b000019000000010b00c039000000400cf000390000000000bc0435000000600ba00039000000000b0b0433000000600cf000390000000000bc0435000000800ba00039000000000b0b0433000000800cf00039000000c00d0000390000000000dc0435000000c00ef0003900000000dc0b04340000000000ce043500000000030f0019000000e00bf00039000000000e0c004b000006510000613d000000000e000019000000000fbe00190000000001ed0019000000000101043300000000001f0435000000200ee000390000000001ce004b000006810000413d000006510000013d000005eb0420009c0000010d0000213d0000004004200039000000400040043f000000200420003900000000001404350000000000320435000000400400043d00000de70000013d0000001d070000290000001e02700069000005e605000041000005e60670009c000000000605001900000000060740190000004006600210000005e60720009c00000000020580190000006002200210000000000262019f000005e60610009c0000000001058019000000c001100210000000000121019f000000000203004b00000e670000c13d000000000204001900000e6a0000013d0000000004000019000700000006001d000600000004001d0000000504400210000300000004001d0000000402400029000000000221034f000000020430006a000000c30440008a000000000202043b000000000542004b000005ea0800004100000000050000190000000005088019000005ea04400197000005ea06200197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000705c019000000000407004b0000004b0000c13d00000004062000290000002004600039000000000241034f000000000502043b001a00000006001d00000000026300490000001f0220008a000005ea06200197000005ea07500197000000000867004b000005ea0900004100000000080000190000000008094019000000000667013f000000000725004b00000000070000190000000007098019000005ea0660009c000000000807c019000000000608004b0000004b0000c13d000a001a0050002d0000000a05100360000000000505043b000c00000005001d000005e90550009c0000004b0000213d0000000c050000290005000500500218000000050530006a0000000a060000290000002007600039000000000657004b00000000060000190000000006092019000005ea05500197001800000007001d000005ea07700197000000000857004b00000000080000190000000008094019000000000557013f000005ea0550009c000000000806c019000000000508004b0000004b0000c13d0000000c0500006b000010f60000613d000b00200040003d0000000b04100360000000000404043b000000000524004b000005ea0800004100000000050000190000000005088019000005ea02200197000005ea06400197000000000726004b00000000070000190000000007084019000000000226013f000005ea0220009c000000000705c019000000000207004b0000004b0000c13d0000001a04400029000000000241034f000000000202043b000005e90520009c0000004b0000213d000900600000009200000009652000b900000000033500190000002004400039000000000534004b000005ea0700004100000000050000190000000005072019000005ea03300197000005ea04400197000000000634004b00000000060000190000000006074019000000000334013f000005ea0330009c000000000605c019000000000306004b0000004b0000c13d0000000c0220006b000010f60000c13d0000000b020000290000004002200039000000000121034f000000000101043b000e00000001001d000005e90110009c0000004b0000213d0000000b01000029000800200010003d0000000002000019001c00000002001d0000000501200210000000180310002900000000020000310000000a0120006a000000df0410008a0000000201000367000000000331034f000000000503043b000000000345004b000005ea0800004100000000030000190000000003088019000005ea04400197000005ea06500197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000703c019000000000307004b0000004b0000c13d0000000b031003600000001a0420006a0000001f0440008a000000000303043b000000000643004b000005ea0900004100000000060000190000000006098019000005ea04400197000005ea07300197000000000847004b00000000080000190000000008094019000000000447013f000005ea0440009c000000000806c019000000000408004b0000004b0000c13d0000001a04300029000000000341034f000000000303043b000005e90630009c0000004b0000213d00000009763000b900000000062600190000002004400039000000000764004b000005ea0a000041000000000700001900000000070a2019000005ea06600197000005ea08400197000000000968004b000000000900001900000000090a4019000000000668013f000005ea0660009c000000000907c019000000000609004b0000004b0000c13d0000001c0330006b000010f00000813d0000000803100360000000000303043b000005e80630009c0000004b0000213d000000400600043d001d00000006001d000006120660009c0000010d0000213d00000018075000290000001d06000029000000a005600039000000400050043f0000001a05100360000000000505043b000000000f5604360000000005720049000000c00650008c000005ea0900004100000000060000190000000006094019000005ea05500197000000000805004b00000000080000190000000008092019000005ea0550009c000000000806c019000000000508004b0000004b0000c13d000000400500043d000005f20650009c0000010d0000213d000000c006500039000000400060043f000000000671034f000000000606043b000005e80860009c0000004b0000213d00000000086504360000002006700039000000000961034f000000000909043b000005e90a90009c0000004b0000213d00000000009804350000002006600039000000000861034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004b0000c13d000000400950003900000000008904350000002008600039000000000881034f000000000808043b000000600950003900000000008904350000004006600039000000000861034f000000000808043b000005e90980009c0000004b0000213d000000000a7800190000001f07a00039000000000827004b000005ea0c000041000000000800001900000000080c8019000005ea07700197000005ea09200197000000000b97004b000000000b000019000000000b0c4019000000000797013f000005ea0770009c000000000b08c01900000000070b004b0000004b0000c13d0000000007a1034f000000000707043b000005e90870009c0000010d0000213d0000001f08700039000d0020000000920000000d0880017f0000003f088000390000000d0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b004039000005e90c90009c0000010d0000213d000000010bb001900000010d0000c13d000000400090043f0000000009780436000000200aa00039000000000ba70019000000000b2b004b0000004b0000213d000000000aa1034f000000050b700272000007d60000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000007ce0000413d0000001f0c700190000007e50000613d000000050bb00210000000000aba034f000000000bb90019000000030cc00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000a0a043b000001000cc00089000000000aca022f000000000aca01cf000000000ada019f0000000000ab043500000000077900190000000000070435000000800750003900000000008704350000002006600039000000000661034f000000000606043b000000a00750003900000000006704350000001c0600002900000060766000c900000000046400190000000002420049000000600620008c000005ea0800004100000000060000190000000006084019000005ea02200197000000000702004b00000000070000190000000007082019000005ea0220009c000000000706c01900000000005f0435000000000207004b0000004b0000c13d000000400200043d000006130520009c0000010d0000213d0000006005200039000000400050043f000000000541034f000000000505043b000000ff0650008c0000004b0000213d00000000055204360000002006400039000000000661034f000000000606043b00000000006504350000004004400039000000000141034f000000000101043b000000400420003900000000001404350000001d040000290000006001400039001900000001001d00000000003104350000004003400039000000000023043500000080024000390000000e01000029001700000002001d0000000000120435000000000101004b000008310000613d001600000003001d001b0000000f001d000006140100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e9011001970000000e0110006b0000001b0f000029000000160300002900000fdf0000413d000000000303043300000000010f0433001b00000001001d0000002001300039000f00000001001d00000000010104330000000002030433001000000003001d0000004003300039001100000003001d0000000003030433000000400500043d00000041045000390000000000340435000000f802200210000000200650003900000000002604350000002102500039000000000012043500000041010000390000000000150435000006110150009c0000010d0000213d0000008001500039000000400010043f001500000005001d0000000002050433000000000302004b000008560000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b0000084f0000413d001600000006001d00000000031200190000000404000039001400000004001d0000000000430435000005e60310009c000005e604000041000000000104801900000040011002100000002002200039000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000400200043d000000000101043b000000000101041a000000ff0110019000000fb30000c13d00000015010000290000000001010433000000000301004b000005e6060000410000001607000029000008810000613d000000000300001900000000042300190000000005730019000000000505043300000000005404350000002003300039000000000413004b0000087a0000413d000000000321001900000014040000290000000000430435000005e60320009c000000000206801900000040022002100000002001100039000005e60310009c00000000010680190000006001100210000000000121019f0000000002000414000005e60320009c0000000002068019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000001b05000029000000800150003900000000010104330000002002100039000005e60320009c000005e604000041000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f00000060025000390000000002020433001300000002001d00000040025000390000000002020433001200000002001d00000020025000390000000002020433001400000002001d0000000002050433001500000002001d0000001d020000290000000002020433001600000002001d00000019020000290000000002020433001d00000002001d0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000201043b0000001b01000029000000a001100039000000000301043300000017010000290000000001010433000005e904100197000000400100043d000001400510003900000000004504350000012004100039000000000034043500000100031000390000000000230435000000e00210003900000013030000290000000000320435000000120200006b0000000002000019000000010200c039000000c00310003900000000002304350000001402000029000005e902200197000000a00310003900000000002304350000001502000029000005e802200197000000800310003900000000002304350000006002100039000000160300002900000000003204350000001d02000029000005e8022001970000004003100039000000000023043500000020021000390000061603000041000000000032043500000140030000390000000000310435000006170310009c0000010d0000213d0000016003100039000000400030043f000005e60320009c000005e604000041000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001700000001001d000006090100004100000000001004390000000001000412001b00000001001d0000000400100443000000a001000039001600000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e8011001970000000002000410001500000002001d000000000112004b0000094d0000c13d000006090100004100000000001004390000001b0100002900000004001004430000001e0100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b001d00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d0110006c0000094d0000c13d000006090100004100000000001004390000001b010000290000000400100443000000070100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000009a60000013d000000400100043d001d00000001001d0000002002100039000005f101000041001400000002001d0000000000120435000006090100004100000000001004390000001b010000290000000400100443000000c00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d0200002900000040022000390000000000120435000006090100004100000000001004390000001b010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d0200002900000060022000390000000000120435000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d04000029000000a002400039000000150300002900000000003204350000008002400039000000000012043500000016010000290000000000140435000005f20140009c0000010d0000213d0000001d02000029000000c001200039000000400010043f0000001403000029000005e60130009c000005e604000041000000000304801900000040013002100000000002020433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000400200043d00000022032000390000001704000029000000000043043500000618030000410000000000320435000000020320003900000000001304350000000001000414000005e60310009c000005e6040000410000000001048019000005e60320009c00000000020480190000004002200210000000c001100210000000000112019f00000619011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000110200002900000000020204330000061a0320009c00000fb50000213d000000000101043b000000100300002900000000030304330000000f040000290000000004040433000000400500043d0000006006500039000000000026043500000040025000390000000000420435000000ff0230018f00000020035000390000000000230435000000000015043500000000000004350000000001000414000005e60210009c000005e6030000410000000001038019000005e60250009c00000000050380190000004002500210000000c001100210000000000121019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000503001900000020050080390000000504500272000009ec0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000009e50000413d0000001f05500190000009fa0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000010020000613d0000000001000433000005e80210019800000fca0000613d00000019020000290000000002020433000000000112013f000005e80110019800000fdc0000c13d0000001c0200002900000001022000390000000c0120006c000007210000413d000000400100043d001c00000001001d000005eb0110009c0000010d0000213d0000001c040000290000004001400039000000400010043f00000002010003670000001a03100360000000000303043b0000000002340436001b00000002001d00000005020000290000003f032000390000061003300197000000400200043d0000000003320019001d00000002001d000000000423004b00000000040000190000000104004039000005e90630009c0000010d0000213d00000001044001900000010d0000c13d000000400030043f0000000c020000290000001d030000290000000000230435000000050300002900000018063000290000000003000031000000000436004b0000004b0000213d0000001807000029000000000467004b0000001d0800002900000a500000413d0000001b020000290000001d040000290000000000420435000000800400043d000000060440006c000010f00000a13d0000000302000029000000a0042000390000001c020000290000000000240435000000800200043d000000060220006c000010f00000a13d00000006040000290000000104400039000000010240006c000006a70000413d000010f90000013d00000020088000390000000002bd0019000000000002043500000080029000390000000000c204350000002002a00039000000000221034f000000000202043b000000a004900039000000000024043500000000009804350000002007700039000000000267004b00000a300000813d000000000471034f000000000404043b000005e90940009c0000004b0000213d000000180b4000290000000004b30049000000c00940008c000005ea0200004100000000090000190000000009024019000005ea04400197000000000a04004b000000000a000019000000000a022019000005ea0440009c000000000a09c01900000000040a004b0000004b0000c13d000000400900043d000005f20490009c0000010d0000213d000000c004900039000000400040043f0000000004b1034f000000000404043b000005e80a40009c0000004b0000213d000000000a4904360000002004b00039000000000c41034f000000000c0c043b000005e90dc0009c0000004b0000213d0000000000ca0435000000200a4000390000000004a1034f000000000404043b000000000c04004b000000000c000019000000010c00c039000000000cc4004b0000004b0000c13d000000400c90003900000000004c04350000002004a00039000000000441034f000000000404043b000000600c90003900000000004c0435000000400aa000390000000004a1034f000000000404043b000005e90c40009c0000004b0000213d000000000eb400190000001f04e00039000000000b34004b000000000b000019000000000b028019000005ea04400197000005ea0c300197000000000dc4004b000000000d000019000000000d0240190000000004c4013f000005ea0440009c000000000d0bc01900000000040d004b0000004b0000c13d0000000004e1034f000000000b04043b000005e904b0009c0000010d0000213d0000001f04b000390000000d0440017f0000003f044000390000000d0440017f000000400c00043d00000000044c0019000000000dc4004b000000000d000019000000010d004039000005e90f40009c0000010d0000213d000000010dd001900000010d0000c13d000000400040043f000000000dbc04360000002004e00039000000000e4b0019000000000e3e004b0000004b0000213d000000000e41034f000000050fb0027200000ab80000613d0000000004000019000000050240021000000000052d001900000000022e034f000000000202043b000000000025043500000001044000390000000002f4004b00000ab00000413d0000001f04b0019000000a420000613d0000000502f0021000000000052e034f00000000022d00190000000304400210000000000e020433000000000e4e01cf000000000e4e022f000000000505043b0000010004400089000000000545022f00000000044501cf0000000004e4019f000000000042043500000a420000013d000c00000005001d00000000030000190000000002000031000000080120006a000000c30410008a000b00000003001d0000000503300210000900000003001d0000000a033000290000000201000367000000000331034f000000000303043b000000000543004b000005ea0800004100000000050000190000000005088019000005ea04400197000005ea06300197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000705c019000000000407004b0000004b0000c13d0000000a033000290000000004320049000000a00540008c000005ea0700004100000000050000190000000005074019000005ea04400197000000000604004b00000000060000190000000006072019000005ea0440009c000000000605c019000000000406004b0000004b0000c13d000000400400043d001200000004001d000006120440009c0000010d0000213d0000001205000029000000a004500039000000400040043f000000000431034f000000000404043b00000000044504360000002005300039000000000651034f000000000606043b000005e90760009c0000004b0000213d00000000073600190000001f06700039000000000826004b000005ea0b000041000000000800001900000000080b8019000005ea06600197000005ea09200197000000000a96004b000000000a000019000000000a0b4019000000000696013f000005ea0660009c000000000a08c01900000000060a004b0000004b0000c13d000000000671034f000000000806043b000005e90680009c0000010d0000213d00000005068002100000003f066000390000061009600197000000400600043d0000000009960019000000000a69004b000000000a000019000000010a004039000005e90b90009c0000010d0000213d000000010aa001900000010d0000c13d000000400090043f0000000000860435000000200770003900000006088002100000000008780019000000000928004b0000004b0000213d000000000987004b00000b470000813d0000000009060019000000000a720049000000400ba0008c000005ea0d000041000000000b000019000000000b0d4019000005ea0aa00197000000000c0a004b000000000c000019000000000c0d2019000005ea0aa0009c000000000c0bc019000000000a0c004b0000004b0000c13d000000400a00043d000005eb0ba0009c0000010d0000213d0000002009900039000000400ba000390000004000b0043f000000000b71034f000000000b0b043b000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000a87004b00000b290000413d00000000006404350000002005500039000000000551034f000000000505043b000005e90650009c0000004b0000213d00000000063500190000001f05600039000000000725004b000005ea0a000041000000000700001900000000070a8019000005ea05500197000005ea08200197000000000985004b000000000900001900000000090a4019000000000585013f000005ea0550009c000000000907c019000000000509004b0000004b0000c13d000000000561034f000000000705043b000005e90570009c0000010d0000213d00000005057002100000003f055000390000061008500197000000400500043d0000000008850019000000000958004b00000000090000190000000109004039000005e90a80009c0000010d0000213d00000001099001900000010d0000c13d000000400080043f0000000000750435000000200660003900000060877000c90000000007670019000000000827004b0000004b0000213d000000000876004b00000b9c0000813d00000000080500190000000009620049000000600a90008c000005ea0c000041000000000a000019000000000a0c4019000005ea09900197000000000b09004b000000000b000019000000000b0c2019000005ea0990009c000000000b0ac01900000000090b004b0000004b0000c13d000000400900043d000006130a90009c0000010d0000213d000000600a9000390000004000a0043f000000000a61034f000000000a0a043b000000ff0ba0008c0000004b0000213d0000002008800039000000000aa90436000000200b600039000000000bb1034f000000000b0b043b0000000000ba0435000000400a600039000000000aa1034f000000000a0a043b000000400b9000390000000000ab043500000000009804350000006006600039000000000976004b00000b770000413d00000012020000290000004002200039001000000002001d00000000005204350000006002300039000000000321034f000000000303043b000005e80630009c0000004b0000213d00000012060000290000006006600039000e00000006001d00000000003604350000002002200039000000000121034f000000000101043b000005e90210009c0000004b0000213d00000012020000290000008002200039000f00000002001d000000000012043500000000060404330000000002060433000000000102004b000010f60000613d0000000001050433000000000112004b000010f60000c13d0000000004000019001100000006001d000d00000002001d0000000001060433000000000141004b000010f00000a13d000000100100002900000000030104330000000001030433000000000141004b000010f00000a13d00000012010000290000000001010433001600000004001d00000005024002100000002004200039000000000264001900000000020204330000000f050000290000000005050433000005e907500197000000400500043d001e00000005001d000006120550009c0000010d0000213d000000000343001900000000030304330000000e0400002900000000040404330000001e06000029000000a005600039000000400050043f000005e8044001970000006005600039001c00000005001d00000000004504350000004004600039001d00000004001d00000000003404350000002003600039000000000023043500000000001604350000008001600039001b00000001001d0000000000710435000000000107004b00000bfa0000613d001900000003001d001a00000007001d000006140100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e9011001970000001a0110006b000000190300002900000fdf0000413d0000000001030433001a00000001001d0000000021010434001900000002001d00000000001004350000000301000039000000200010043f0000000001000414000005e60210009c000005e601008041000000c0011002100000061d011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000400500043d000000000101043b000000000101041a000005e80110019800000fe80000613d0000000002000411000000000121004b00000fea0000c13d0000001d0100002900000000030104330000002001300039001300000001001d00000000010104330000000002030433001400000003001d0000004003300039001500000003001d000000000303043300000041045000390000000000340435000000f802200210000000200650003900000000002604350000002102500039000000000012043500000041010000390000000000150435000006110150009c0000010d0000213d0000008001500039000000400010043f001d00000005001d0000000002050433000000000302004b00000c350000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b00000c2e0000413d001800000006001d00000000031200190000000404000039001700000004001d0000000000430435000005e60310009c000005e604000041000000000104801900000040011002100000002002200039000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000400200043d000000000101043b000000000101041a000000ff0110019000000fb30000c13d0000001d010000290000000001010433000000000301004b000005e606000041000000180700002900000c600000613d000000000300001900000000042300190000000005730019000000000505043300000000005404350000002003300039000000000413004b00000c590000413d000000000321001900000017040000290000000000430435000005e60320009c000000000206801900000040022002100000002001100039000005e60310009c00000000010680190000006001100210000000000121019f0000000002000414000005e60320009c0000000002068019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000001c0100002900000000020104330000001e0100002900000000030104330000001a010000290000000004010433000000190100002900000000050104330000001b010000290000000001010433000005e906100197000000400100043d000000c0071000390000000000670435000000a00610003900000000005604350000008005100039000000000045043500000060041000390000000000340435000005e80220019700000040031000390000000000230435000000c002000039001a00000002001d0000000002210436000006070300004100000000003204350000062b0310009c0000010d0000213d000000e003100039000000400030043f000005e60320009c000005e604000041000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001b00000001001d000006090100004100000000001004390000000001000412001d00000001001d0000000400100443000000a001000039001900000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e8011001970000000002000410001800000002001d000000000112004b00000cf60000c13d000006090100004100000000001004390000001d010000290000000400100443000000800100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b001e00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e0110006c00000cf60000c13d000006090100004100000000001004390000001d0100002900000004001004430000000c0100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d00000d4f0000013d000000400100043d001e00000001001d0000002002100039000005f101000041001700000002001d0000000000120435000006090100004100000000001004390000001d0100002900000004001004430000001a0100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e0200002900000040022000390000000000120435000006090100004100000000001004390000001d010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e0200002900000060022000390000000000120435000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e04000029000000a002400039000000180300002900000000003204350000008002400039000000000012043500000019010000290000000000140435000005f20140009c0000010d0000213d0000001e02000029000000c001200039000000400010043f0000001703000029000005e60130009c000005e604000041000000000304801900000040013002100000000002020433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000400200043d00000022032000390000001b04000029000000000043043500000618030000410000000000320435000000020320003900000000001304350000000001000414000005e60310009c000005e6040000410000000001048019000005e60320009c00000000020480190000004002200210000000c001100210000000000112019f00000619011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000150200002900000000020204330000061a0320009c00000fb50000213d000000000101043b0000001403000029000000000303043300000013040000290000000004040433000000400500043d0000006006500039000000000026043500000040025000390000000000420435000000ff0230018f00000020035000390000000000230435000000000015043500000000000004350000000001000414000005e60210009c000005e6030000410000000001038019000005e60250009c00000000050380190000004002500210000000c001100210000000000121019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c00000000050300190000002005008039000000050450027200000d950000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000d8e0000413d0000001f0550019000000da30000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f0003000000010355000000010220019000000ff20000613d0000000001000433000005e8021001980000001106000029000000160400002900000fca0000613d0000001c020000290000000002020433000000000112013f000005e80110019800000fdc0000c13d00000001044000390000000d0140006c00000bbc0000413d000000400100043d000005eb0210009c0000010d0000213d000000120200002900000000020204330000004003100039000000400030043f0000002003100039000000110400002900000000004304350000000000210435000000800200043d0000000b0220006c000010f00000a13d0000000902000029000000a0022000390000000000120435000000800100043d0000000b0110006c000010f00000a13d0000000b030000290000000103300039000000070130006c00000aca0000413d0000014a0000013d0000000000500435000000020440008c000000000400001900000dda0000413d000006210500004100000000040000190000000006430019000000000705041a000000000076043500000001055000390000002004400039000000000614004b00000dd30000413d0000003f01400039000000200300008a000000000131016f0000000003210019000000000113004b000000000100001900000001010040390000000004030019000005e90330009c0000010d0000213d00000001011001900000010d0000c13d000000400040043f001e00000004001d000006220140009c0000010d0000213d0000001e030000290000002001300039001900000001001d000000400010043f0000000000030435000000400800043d0000002001800039000000e003000039000000000031043500000623010000410000000000180435000000e0018000390000001d03000029000000004303043400000000003104350000010001800039000000000503004b00000e040000613d000000000500001900000000061500190000000007540019000000000707043300000000007604350000002005500039000000000635004b00000dfd0000413d000000000413001900000000000404350000001f03300039001c0020000000920000001c0330017f00000000031300190000000001830049001d00000008001d0000004004800039000000000014043500000000160204340000000005630436000000000206004b00000e1a0000613d000000000200001900000000035200190000000004210019000000000404043300000000004304350000002002200039000000000362004b00000e130000413d001b00000005001d001a00000006001d00000000015600190000000000010435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d04000029000000800240003900000000030004100000000000320435000000600240003900000000001204350000001a010000290000001f011000390000001c0110017f0000001b011000290000000002410049000000c0034000390000000000230435000000a00240003900000000000204350000001e0200002900000000020204330000000001210436000000000302004b000004e30000613d00000000030000190000001905000029000000005405043400000000014104360000000103300039000000000423004b00000e410000413d000004e30000013d000000000001042f000000200200003900000000040000190000001d0600002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00000e4b0000413d0000001705000029000000000353004b00000e5f0000813d0000000303500210000000f80330018f000000010400008a000000000334022f000000000343013f00000000026200190000000002020433000000000232016f000000000021041b000000010150021000000001011001bf000000000010041b000000ff010000390000001b030000290000001a040000290000001905000029000005020000013d000005ee011001c7000080090200003900000000050000191794178a0000040f000300000001035500000000030100190000006003300270000105e60030019d000005e603300197000000010220019000000eef0000613d0000001f0230018f00000005043002720000001d0800002900000e7f0000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e770000413d000000000502004b00000e8e0000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000000200200008a000000000121016f0000000002810019000000000112004b00000000010000190000000101004039001900000002001d000005e90220009c0000010d0000213d00000001011001900000010d0000c13d000005ea01000041000000200230008c00000000020000190000000002014019000005ea04300197000000000504004b000000000100a019000005ea0440009c000000000102c0190000001902000029000000400020043f000000000101004b0000004b0000c13d0000001d010000290000000001010433000005e90210009c0000004b0000213d0000001d023000290000001d011000290000001f03100039000005ea04000041000000000523004b00000000050000190000000005048019000005ea03300197000005ea06200197000000000763004b0000000004008019000000000363013f000005ea0330009c000000000405c019000000000304004b0000004b0000c13d0000000013010434000005e90430009c0000010d0000213d00000005043002100000003f0540003900000610055001970000001905500029000005e90650009c0000010d0000213d000000400050043f00000019050000290000000003350436001800000003001d0000000003140019000000000223004b0000004b0000213d000000000231004b00000ed20000813d000000180200002900000000140104340000000002420436000000000431004b00000ece0000413d000000010100006b000000190a0000290000107a0000c13d000000400100043d0000001602000029000000000221043600000000030a043300000000003204350000004002100039000000000403004b00000ee50000613d000000000400001900000019060000290000002006600039000000000506043300000000025204360000000104400039000000000534004b00000edf0000413d0000000002120049000005e603000041000005e60420009c0000000002038019000005e60410009c000000000103801900000040011002100000006002200210000000000112019f000017950001042e000000400200043d0000001f0430018f000000050530027200000efc0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000ef40000413d000000000604004b0000101e0000613d000010110000013d000000200200003900000000040000190000001a0600002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00000f020000413d0000001705000029000000000353004b00000f160000813d0000000303500210000000f80330018f000000010400008a000000000334022f000000000343013f0000001a022000290000000002020433000000000232016f000000000021041b000000010150021000000001011001bf0000001602000029000000000012041b000000ff010000390000001d060000290000001b030000290000058d0000013d0000008004000039000000400500003900000000060000190000001d0c00002900000f260000013d0000000106600039000000000726004b0000017b0000813d0000000007c10049000000440770008a00000000037304360000002004400039000000000704043300000000870704340000000009710436000000000708043300000000005904350000004009100039000000000807043300000000008904350000006001100039000000000908004b00000f230000613d00000000090000190000002007700039000000000a07043300000000ba0a0434000000000aa10436000000000b0b04330000000000ba043500000040011000390000000109900039000000000a89004b00000f360000413d00000f230000013d000005ee011001c700008009020000390000001e0400002900000000050000191794178a0000040f000300000001035500000000030100190000006003300270000105e60030019d000005e603300197000000010220019000000f540000613d0000001d01000029000005e90110009c0000010d0000213d0000001d01000029000000400010043f0000000001000019000017950001042e000000400200043d0000001f0430018f000000050530027200000f610000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000f590000413d000000000604004b0000101e0000613d000010110000013d0000001e02000029000001c00020043f0000001d020000290000000003020433000005e90230009c0000010d0000213d0000000202000039000000000502041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f0000000105500190000001b00000c13d000000200540008c00000f880000413d0000001f053000390000000505500270000005f306500041000005f305000041000000200730008c000000000506801900000000002004350000001f044000390000000504400270000005f304400041000000000645004b00000f880000813d000000000005041b0000000105500039000000000645004b00000f840000413d0000001f0430008c000010250000a13d00000000002004350000001c06300180000010310000c13d0000002005000039000005f3040000410000103d0000013d0000060e011001c700008009020000390000001c0400002900000000050000191794178a0000040f000300000001035500000000030100190000006003300270000105e60030019d000005e603300197000000010220019000000fa30000613d0000001e01000029000005e90110009c0000010d0000213d0000001e01000029000000400010043f0000000001000019000017950001042e000000400200043d0000001f0430018f000000050530027200000fb00000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000fa80000413d000000000604004b0000101e0000613d000010110000013d00000615010000410000062d0000013d000000400100043d00000064021000390000062f0300004100000000003204350000004402100039000006300300004100000000003204350000002402100039000000220300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c0000000001028019000000400110021000000631011001c70000179600010430000000400100043d00000044021000390000062d0300004100000000003204350000002402100039000000180300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c000000000102801900000040011002100000060f011001c70000179600010430000000400100043d0000062c0200004100000fe10000013d000000400100043d00000629020000410000000000210435000005e602000041000005e60310009c00000000010280190000004001100210000005f6011001c70000179600010430000006320100004100000feb0000013d0000062a010000410000000000150435000005e601000041000005e60250009c00000000050180190000004001500210000005f6011001c70000179600010430000000400200043d0000001f0430018f000000050530027200000fff0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000ff70000413d000000000604004b000010110000c13d0000101e0000013d000000400200043d0000001f0430018f00000005053002720000100f0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010070000413d000000000604004b0000101e0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000005e601000041000005e60420009c000000000201801900000040012002100000006002300210000000000121019f0000179600010430000000000403004b00000000040000190000102a0000613d0000001b0400002900000000040404330000000305300210000000010600008a000000000556022f000000000565013f000000000454016f0018000100300218000010490000013d000005f304000041000000200500003900000000070000190000001d0900002900000000089500190000000008080433000000000084041b000000200550003900000001044000390000002007700039000000000867004b000010350000413d000000000636004b000010480000813d0000000306300210000000f80660018f000000010700008a000000000667022f000000000676013f0000001d055000290000000005050433000000000565016f000000000054041b000000010430021000000018034001af000000000032041b000000800200043d00000140000004430000016000200443000000a00300043d00000020020000390000018000200443000001a0003004430000004003000039000000c00400043d000001c000300443000001e0004004430000006003000039000002000030044300000220001004430000008001000039000001000300043d00000240001004430000026000300443000000190100002900000280001004430000001a01000029000002a000100443000000c001000039000001400300043d000002c000100443000002e000300443000000e001000039000001600300043d000003000010044300000320003004430000010001000039000001800300043d000003400010044300000360003004430000012001000039000001a00300043d0000038000100443000003a0003004430000014001000039000003c0001004430000001e01000029000003e00010044300000100002004430000000b010000390000012000100443000005f401000041000017950001042e0000000002000019000000000c000019000010810000013d00000017020000290000000102200039000000010120006c00000ed50000813d001700000002001d000000050120021000000004021000290000000001000031000000020310006a000000c30430008a0000000203000367000000000223034f000000000202043b000000000542004b000005ea0800004100000000050000190000000005088019000005ea04400197000005ea06200197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000705c019000000000407004b0000004b0000c13d000000040420002900000000024100490000001f0620008a0000002002400039000000000523034f000000000505043b000000000765004b000005ea0b000041000000000700001900000000070b8019000005ea06600197000005ea08500197000000000968004b000000000900001900000000090b4019000000000668013f000005ea0660009c000000000907c019000000000609004b0000004b0000c13d0000000004450019000000000343034f000000000303043b001b00000003001d000005e90330009c0000004b0000213d0000001b03000029000000050330021000000000013100490000002003400039000000000413004b000005ea0600004100000000040000190000000004062019000005ea01100197000005ea03300197000000000513004b00000000050000190000000005064019000000000113013f000005ea0110009c000000000504c019000000000105004b0000004b0000c13d0000001b0100006b0000107d0000613d001a00400020003d00000000030000190000001a010000290000000201100367000000000201043b000005e80120009c0000004b0000213d001d00000002001d001e00000003001d00000000010a04330000000001c1004b000010f00000a13d0000000501c002100000001801100029000000000101043300000000001004350000000301000039000000200010043f0000000001000414000005e60210009c000005e601008041000000c0011002100000061d011001c70000801002000039001c0000000c001d1794178f0000040f0000001c0c0000290000000102200190000000190a0000290000001e030000290000001d040000290000004b0000613d000000000101043b000000000201041a0000061e02200197000000000242019f000000000021041b000000010cc0003900000001033000390000001b0130006c000010c80000413d0000107d0000013d000006270100004100000000001004350000003201000039000000040010043f00000628010000410000179600010430000000400100043d000006330200004100000fe10000013d000000400700043d000000780000013d0000001d020000290000001f022000390000001b0220017f0000014402200039000005e6050000410000001c07000029000005e60670009c000000000605001900000000060740190000004006600210000005e60720009c00000000020580190000006002200210000000000262019f000005e60610009c0000000001058019000000c001100210000000000121019f000000000203004b000011110000c13d0000000002040019000011140000013d000005ee011001c7000080090200003900000000050000191794178a0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000011270000613d000000000700001900000005087002100000001c09800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000111f0000413d000000000705004b000011360000613d0000000506600210000000000761034f0000001c066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000011660000613d0000001f01400039000000600110018f0000001c02100029000000000112004b00000000010000190000000101004039001d00000002001d000005e90220009c0000010d0000213d00000001011001900000010d0000c13d0000001d01000029000000400010043f000000200130008c0000004b0000413d0000001e01000029000000a4011000390000000201100367000000000101043b001e00000001001d000005e80110009c0000004b0000213d0000001c010000290000000001010433001c00000001001d00000000001004350000000301000039000000200010043f00000040020000390000000001000019179417550000040f000000000201041a0000061e022001970000001e022001af000000000021041b0000001d030000290000001c010000290000000000130435000005e601000041000005e60230009c0000000003018019000000400130021000000606011001c7000017950001042e000000400200043d0000001f0430018f0000000505300272000011730000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000116b0000413d000000000604004b0000101e0000613d000010110000013d000000000403004b000011800000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000011790000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000203004b0000118f0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b000011880000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000005e90310009c000011a30000213d0000000102200190000011a30000c13d000000400010043f000000000001042d000006270100004100000000001004350000004101000039000000040010043f00000628010000410000179600010430000006350210009c000011ae0000413d0000004003000039000006354210012a000011b80000013d000006363210012a000006370310009c000000000201a019000006370310009c00000000030000190000002003002039000006380420009c00000010033081bf0000063902208197000006384220812a0000063a0420009c0000000803308039000005e9022081970000063a4220812a000027100420008c0000000403308039000005e602208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b00000000060000190000000106004039000005e90740009c000011f60000213d0000000106600190000011f60000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f0000000506600272000011e50000613d0000000007000031000000020770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000011dd0000413d000000000405004b000011e70000613d00000000033200190000002103300039000000090510008c0000000a5110011a00000003055002100000063b0550021f0000063c05500197000000010330008a00000000060304330000063d06600197000000000556019f0000000000530435000011e90000213d0000000001020019000000000001042d000006270100004100000000001004350000004101000039000000040010043f000006280100004100001796000104300005000000000002000006090100004100000000001004390000000001000412000400000001001d0000000400100443000000a001000039000300000001001d0000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000005e8011001970000000002000410000200000002001d000000000112004b000012470000c13d000006090100004100000000001004390000000401000029000000040010044300000080010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000500000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000000050110006c000012470000c13d000006090100004100000000001004390000000401000029000000040010044300000060010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000000000001042d000000400100043d000500000001001d0000002002100039000005f101000041000100000002001d00000000001204350000060901000041000000000010043900000004010000290000000400100443000000c0010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b0000000502000029000000400220003900000000001204350000060901000041000000000010043900000004010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000000050200002900000060022000390000000000120435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000012a40000613d000000000101043b0000000504000029000000a0024000390000000203000029000000000032043500000080024000390000000000120435000000030100002900000000001404350000063e0140009c000012a50000813d0000000503000029000000c001300039000000400010043f000005e6010000410000000104000029000005e60240009c000000000401801900000040024002100000000003030433000005e60430009c00000000030180190000006003300210000000000223019f0000000003000414000005e60430009c0000000003018019000000c001300210000000000121019f000005ee011001c700008010020000391794178f0000040f0000000102200190000012ab0000613d000000000101043b000000000001042d000000000001042f000006270100004100000000001004350000004101000039000000040010043f0000062801000041000017960001043000000000010000190000179600010430000d000000000002000d00000001001d0000008001100039000a00000001001d0000000001010433000005e901100198000012c50000613d000c00000001001d00000614010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000014a70000613d000000000101043b000005e9011001970000000c0110006b000015020000413d0000000d020000290000004001200039000000000301043300000020012000390000000001010433000c00000001001d0000002001300039000300000001001d00000000010104330000000002030433000400000003001d0000004003300039000500000003001d0000000003030433000000400500043d00000041045000390000000000340435000000f80220021000000020065000390000000000260435000000210250003900000000001204350000004101000039000100000001001d00000000001504350000063f0150009c000014a80000813d0000008001500039000000400010043f000b00000005001d0000000002050433000000000302004b000012ee0000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b000012e70000413d000900000006001d00000000031200190000000404000039000800000004001d0000000000430435000005e603000041000005e60410009c000000000103801900000040011002100000002002200039000005e60420009c00000000020380190000006002200210000000000112019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000400200043d000000000101043b000000000101041a000000ff011001900000000b01000029000014ae0000c13d0000000001010433000000000301004b0000000906000029000013180000613d000000000300001900000000042300190000000005630019000000000505043300000000005404350000002003300039000000000413004b000013110000413d000000000321001900000008040000290000000000430435000005e604000041000005e60320009c000000000204801900000040022002100000002001100039000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000000c04000029000000800140003900000000010104330000002002100039000005e60320009c000005e605000041000000000205801900000040022002100000000001010433000005e60310009c00000000010580190000006001100210000000000121019f00000060024000390000000002020433000700000002001d00000040024000390000000002020433000600000002001d00000020024000390000000002020433000800000002001d0000000002040433000900000002001d0000000d020000290000000003020433000b00000003001d0000006002200039000200000002001d0000000002020433000d00000002001d0000000002000414000005e60320009c0000000002058019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000201043b0000000c01000029000000a00110003900000000030104330000000a010000290000000001010433000005e904100197000000400100043d000001400510003900000000004504350000012004100039000000000034043500000100031000390000000000230435000000e00210003900000007030000290000000000320435000000060200006b0000000002000019000000010200c039000000c00310003900000000002304350000000802000029000005e902200197000000a00310003900000000002304350000000902000029000005e8022001970000008003100039000000000023043500000060021000390000000b0300002900000000003204350000000d02000029000005e8022001970000004003100039000000000023043500000020021000390000061603000041000000000032043500000140030000390000000000310435000006170310009c000014a80000213d0000016003100039000000400030043f000005e604000041000005e60320009c000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000101043b000b00000001001d000006090100004100000000001004390000000001000412000c00000001001d0000000400100443000000a001000039000a00000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b000005e8011001970000000002000410000900000002001d000000000112004b000013e80000c13d000006090100004100000000001004390000000c01000029000000040010044300000080010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b000d00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d0110006c000013e80000c13d000006090100004100000000001004390000000c01000029000000040010044300000060010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000014430000013d000000400100043d000d00000001001d0000002002100039000005f101000041000800000002001d0000000000120435000006090100004100000000001004390000000c010000290000000400100443000000c0010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d0200002900000040022000390000000000120435000006090100004100000000001004390000000c010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d0200002900000060022000390000000000120435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d04000029000000a00240003900000009030000290000000000320435000000800240003900000000001204350000000a010000290000000000140435000005f20140009c000014a80000213d0000000d03000029000000c001300039000000400010043f000005e6010000410000000804000029000005e60240009c000000000401801900000040024002100000000003030433000005e60430009c00000000030180190000006003300210000000000223019f0000000003000414000005e60430009c0000000003018019000000c001300210000000000121019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000101043b000000400200043d00000022032000390000000b0400002900000000004304350000061803000041000000000032043500000002032000390000000000130435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000121019f00000619011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000400200043d000000050300002900000000030304330000061a0430009c000014b60000213d000000000101043b00000004040000290000000004040433000000030500002900000000050504330000006006200039000000000036043500000040032000390000000000530435000000ff0340018f0000002004200039000000000034043500000000001204350000000000000435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000112019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000403001900000020040080390000001f0540018f00000005044002720000148a0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000014830000413d000000000605004b000014980000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000014ca0000613d0000000001000433000005e802100198000014ed0000613d00000002020000290000000002020433000000000112013f000005e801100198000014ff0000c13d000000000001042d00000000010000190000179600010430000000000001042f000006270100004100000000001004350000000101000029000000040010043f0000062801000041000017960001043000000615010000410000000000120435000005e601000041000005e60320009c00000000020180190000004001200210000005f6011001c7000017960001043000000064012000390000062f0300004100000000003104350000004401200039000006300300004100000000003104350000002401200039000000220300003900000000003104350000062e010000410000000000120435000000040120003900000020030000390000000000310435000005e601000041000005e60320009c0000000002018019000000400120021000000631011001c70000179600010430000000400200043d0000001f0430018f0000000505300272000014d70000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000014cf0000413d000000000604004b000014e60000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000005e601000041000005e60420009c000000000201801900000040012002100000006002300210000000000121019f0000179600010430000000400100043d00000044021000390000062d0300004100000000003204350000002402100039000000180300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c000000000102801900000040011002100000060f011001c70000179600010430000000400100043d0000062c02000041000015040000013d000000400100043d00000629020000410000000000210435000005e602000041000005e60310009c00000000010280190000004001100210000005f6011001c70000179600010430000c000000000002000c00000001001d0000008001100039000b00000001001d0000000001010433000005e901100198000015230000613d000a00000001001d00000614010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000016e60000613d000000000101043b000005e9011001970000000a0110006b0000174b0000413d0000000c0100002900000020011000390000000001010433000a00000001001d0000000021010434000900000002001d00000000001004350000000301000039000000200010043f000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000061d011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000400500043d000000000101043b000000000101041a000005e801100198000016ed0000613d0000000002000411000000000121004b000016ef0000c13d0000000c01000029000000400110003900000000030104330000002001300039000300000001001d00000000010104330000000002030433000400000003001d0000004003300039000500000003001d000000000303043300000041045000390000000000340435000000f80220021000000020065000390000000000260435000000210250003900000000001204350000004101000039000100000001001d00000000001504350000063f0150009c000016e70000813d0000008001500039000000400010043f000800000005001d0000000002050433000000000302004b000015630000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b0000155c0000413d000700000006001d00000000031200190000000404000039000600000004001d0000000000430435000005e603000041000005e60410009c000000000103801900000040011002100000002002200039000005e60420009c00000000020380190000006002200210000000000112019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000400200043d000000000101043b000000000101041a000000ff011001900000000801000029000016f70000c13d0000000001010433000000000301004b00000007060000290000158d0000613d000000000300001900000000042300190000000005630019000000000505043300000000005404350000002003300039000000000413004b000015860000413d000000000321001900000006040000290000000000430435000005e603000041000005e60420009c000000000203801900000040022002100000002001100039000005e60410009c00000000010380190000006001100210000000000121019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000000a010000290000000002010433000000090100002900000000030104330000000b010000290000000001010433000005e9041001970000000c0100002900000000050104330000006001100039000900000001001d0000000006010433000000400100043d000000c0071000390000000000470435000000a00410003900000000003404350000008003100039000000000023043500000060021000390000000000520435000005e80260019700000040031000390000000000230435000000c002000039000800000002001d0000000002210436000006070300004100000000003204350000062b0310009c000016e70000213d000000e003100039000000400030043f000005e604000041000005e60320009c000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000000101043b000a00000001001d000006090100004100000000001004390000000001000412000b00000001001d0000000400100443000000a001000039000700000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b000005e8011001970000000002000410000600000002001d000000000112004b000016270000c13d000006090100004100000000001004390000000b01000029000000040010044300000080010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b000c00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c0110006c000016270000c13d000006090100004100000000001004390000000b01000029000000040010044300000060010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000016820000013d000000400100043d000c00000001001d0000002002100039000005f101000041000200000002001d0000000000120435000006090100004100000000001004390000000b01000029000000040010044300000008010000290000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c0200002900000040022000390000000000120435000006090100004100000000001004390000000b010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c0200002900000060022000390000000000120435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c04000029000000a002400039000000060300002900000000003204350000008002400039000000000012043500000007010000290000000000140435000005f20140009c000016e70000213d0000000c03000029000000c001300039000000400010043f000005e6010000410000000204000029000005e60240009c000000000401801900000040024002100000000003030433000005e60430009c00000000030180190000006003300210000000000223019f0000000003000414000005e60430009c0000000003018019000000c001300210000000000121019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000000101043b000000400200043d00000022032000390000000a0400002900000000004304350000061803000041000000000032043500000002032000390000000000130435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000121019f00000619011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000400200043d000000050300002900000000030304330000061a0430009c000016ff0000213d000000000101043b00000004040000290000000004040433000000030500002900000000050504330000006006200039000000000036043500000040032000390000000000530435000000ff0340018f0000002004200039000000000034043500000000001204350000000000000435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000112019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000403001900000020040080390000001f0540018f0000000504400272000016c90000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000016c20000413d000000000605004b000016d70000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000017130000613d0000000001000433000005e802100198000017360000613d00000009020000290000000002020433000000000112013f000005e801100198000017480000c13d000000000001042d00000000010000190000179600010430000000000001042f000006270100004100000000001004350000000101000029000000040010043f000006280100004100001796000104300000063201000041000016f00000013d0000062a010000410000000000150435000005e601000041000005e60250009c00000000050180190000004001500210000005f6011001c7000017960001043000000615010000410000000000120435000005e601000041000005e60320009c00000000020180190000004001200210000005f6011001c7000017960001043000000064012000390000062f0300004100000000003104350000004401200039000006300300004100000000003104350000002401200039000000220300003900000000003104350000062e010000410000000000120435000000040120003900000020030000390000000000310435000005e601000041000005e60320009c0000000002018019000000400120021000000631011001c70000179600010430000000400200043d0000001f0430018f0000000505300272000017200000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000017180000413d000000000604004b0000172f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000005e601000041000005e60420009c000000000201801900000040012002100000006002300210000000000121019f0000179600010430000000400100043d00000044021000390000062d0300004100000000003204350000002402100039000000180300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c000000000102801900000040011002100000060f011001c70000179600010430000000400100043d0000062c020000410000174d0000013d000000400100043d00000629020000410000000000210435000005e602000041000005e60310009c00000000010280190000004001100210000005f6011001c70000179600010430000000000001042f000005e603000041000005e60410009c00000000010380190000004001100210000005e60420009c00000000020380190000006002200210000000000112019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000017690000613d000000000101043b000000000001042d0000000001000019000017960001043000000000050100190000000000200439000000050130008c000017790000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000631004b000017710000413d000005e6010000410000000002000414000005e60420009c0000000002018019000005e60430009c00000000030180190000006001300210000000c002200210000000000112019f00000640011001c700000000020500191794178f0000040f0000000102200190000017890000613d000000000101043b000000000001042d000000000001042f0000178d002104210000000102000039000000000001042d0000000002000019000000000001042d00001792002104230000000102000039000000000001042d0000000002000019000000000001042d0000179400000432000017950001042e0000179600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf312e332e30000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000008b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000ffffffffffffff3f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace000000020000000000000000000000000000030000000100000000000000000083780ffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000065c40b9b00000000000000000000000000000000000000000000000000000000a6d4dbc600000000000000000000000000000000000000000000000000000000a6d4dbc700000000000000000000000000000000000000000000000000000000b83010d300000000000000000000000000000000000000000000000000000000ed24911d0000000000000000000000000000000000000000000000000000000065c40b9c0000000000000000000000000000000000000000000000000000000084b0196e00000000000000000000000000000000000000000000000000000000954115250000000000000000000000000000000000000000000000000000000017d7de7b0000000000000000000000000000000000000000000000000000000017d7de7c000000000000000000000000000000000000000000000000000000003c0427150000000000000000000000000000000000000000000000000000000054fd4d50000000000000000000000000000000000000000000000000000000000eabf6600000000000000000000000000000000000000000000000000000000010d736d50000000000000000000000000000000000000000000000000000000012b11a17000000000000000000000000000000000000002000000000000000000000000078a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d0000000000000000000000000000000000000020000000800000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000004692626700000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9f796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132cce9a82400000000000000000000000000000000000000000000000000000000ea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1000000000000000000000000000000000000000000000000fffffffffffffe9f190100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000420000000000000000000000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0000000000000000000000000000000000000008000000000000000000000000044adc90e000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000b3512b0c00000000000000000000000000000000000000000000000000000000290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000000000000000000000000000ffffffffffffffdf0f000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe1ff17325e7000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001ab7da6b000000000000000000000000000000000000000000000000000000004ca8886700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f8baa579f0000000000000000000000000000000000000000000000000000000045434453413a20696e76616c6964207369676e6174757265000000000000000008c379a000000000000000000000000000000000000000000000000000000000756500000000000000000000000000000000000000000000000000000000000045434453413a20696e76616c6964207369676e6174757265202773272076616c0000000000000000000000000000000000000084000000000000000000000000c5723b5100000000000000000000000000000000000000000000000000000000947d5a84000000000000000000000000000000000000000000000000000000004cb7e9e5000000000000000000000000000000000000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff8002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a03ce84924ed27808e4ca2800f02e2c07e01850ec4a20f399d9b7e1f4ce5d419\",\n  \"entries\": [\n    {\n      \"constructorArgs\": [\"0x21d8d4eE83b80bc0Cc0f2B7df3117Cf212d02901\", \"EIP712Proxy\"],\n      \"salt\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n      \"deploymentType\": \"create\",\n      \"factoryDeps\": [],\n      \"address\": \"0x8E8F79e9A1Cd4da7bD2f15e5B0a4B4a613E37C5a\",\n      \"txHash\": \"0x4d6eef5d1787ef87dc3c5b390b02bd1b30cd75b14bea9e21c85fb970dcf5ba69\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/zksync/Indexer.json",
    "content": "{\n  \"address\": \"0x8AdA7852df64A66ca89EFc82144e6be71Bd53B4E\",\n  \"sourceName\": \"contracts/Indexer.sol\",\n  \"contractName\": \"Indexer\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"eas\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidAttestation\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidEAS\",\n      \"type\": \"error\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"InvalidOffset\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"Indexed\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEAS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IEAS\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getReceivedAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSchemaAttesterRecipientAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"attester\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"schemaUID\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"start\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"length\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"reverseOrder\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"getSentAttestationUIDs\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"indexAttestation\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"attestationUIDs\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"indexAttestations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"attestationUID\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAttestationIndexed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"bytecode\": \"0x00040000000000020015000000000002000000000701034f00000000010700190000006003100270000002120130019700030000001703550002000000070355000002120030019d0000000102200190000000250000c13d0000008002000039000000400020043f000000040210008c0000004c0000413d000000000207043b000000e002200270000002180320009c0000004e0000a13d000002190320009c000000730000a13d0000021a0320009c000000df0000213d0000021d0320009c0000013f0000613d0000021e0220009c0000004c0000c13d0000000002000416000000240110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b0842052f0000040f0000000001000019000008430001042e0000000002000416000000000202004b0000004c0000c13d0000001f0210003900000213022001970000010002200039000000400020043f0000001f0210018f0000000503100272000000380000613d00000000040000190000000505400210000000000657034f000000000606043b000001000550003900000000006504350000000104400039000000000534004b000000300000413d000000000402004b000000470000613d0000000503300210000000000437034f00000003022002100000010003300039000000000503043300000000052501cf000000000525022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000230435000000200110008c0000004c0000413d000001000100043d000002140210009c000000630000a13d00000000010000190000084400010430000002220320009c000000cb0000213d000002260320009c0000015b0000613d000002270320009c000001670000613d000002280220009c0000004c0000c13d0000000002000416000000240110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000301000039000000200010043f000000400200003900000000010000190000029f0000013d0000000103000039000000800030043f0000000302000039000000a00020043f000000c00000043f000000000401004b0000012e0000c13d000000400100043d000002160200004100000000002104350000021202000041000002120310009c0000000001028019000000400110021000000217011001c700000844000104300000021f0320009c000001800000613d000002200320009c000001d60000613d000002210220009c0000004c0000c13d0000000002000416000000a40110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d0000008402700370000000000302043b000000000203004b0000000002000019000000010200c039000d00000003001d000000000223004b0000004c0000c13d0000002402700370000000000202043b000c00000002001d0000004402700370000000000202043b000b00000002001d0000006402700370000000000202043b000a00000002001d0000000000100435000000200000043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000c00000002001d000900000003001d0000000002320436000800000002001d000000000010043500000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000905000029000000000205004b0000012c0000613d000000000101043b00000000020000190000000804000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000000c40000413d000004ac0000013d000002230320009c000001ea0000613d000002240320009c0000024a0000613d000002250120009c0000004c0000c13d0000000001000416000000000101004b0000004c0000c13d0000000001000412000f00000001001d000e00600000003d00000000010004150000000f0110008a0000000501100210084208240000040f0000021401100197000000800010043f0000022b01000041000008430001042e0000021b0320009c0000027c0000613d0000021c0220009c0000004c0000c13d0000000002000416000000a40110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d0000008402700370000000000302043b000000000203004b0000000002000019000000010200c039000d00000003001d000000000223004b0000004c0000c13d0000002402700370000000000202043b000c00000002001d0000004402700370000000000202043b000b00000002001d0000006402700370000000000202043b000a00000002001d00000000001004350000000101000039000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000c00000002001d000900000003001d0000000002320436000800000002001d000000000010043500000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000905000029000000000205004b000004a30000c13d0000000804000029000004ac0000013d000000e00010043f0000014000000443000001600030044300000020030000390000018000300443000001a0002004430000004002000039000001c000200443000001e0000004430000006002000039000002000020044300000220001004430000010000300443000000040100003900000120001004430000021501000041000008430001042e0000000002000416000000240310008c0000004c0000413d000000000202004b0000004c0000c13d0000000402700370000000000202043b0000022c0320009c0000004c0000213d0000002303200039000000000313004b0000004c0000813d0000000403200039000000000337034f000000000303043b000700000003001d0000022c0330009c0000004c0000213d000600240020003d000000070200002900000005022002100000000602200029000000000112004b0000004c0000213d000000070100006b000002a40000c13d0000000001000019000008430001042e0000000002000416000000440110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d0000000000100435000000200000043f000001730000013d0000000002000416000000440110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d00000000001004350000000101000039000000200010043f0000004002000039000c00000002001d0000000001000019000d0000000703530842080e0000040f0000000d0200035f0000002402200370000000000202043b0000000000200435000000200010043f00000000010000190000000c020000290000029f0000013d0000000002000416000000c40110008c0000004c0000413d000000000102004b0000004c0000c13d0000002401700370000000000101043b000d00000001001d000002140110009c0000004c0000213d0000004401700370000000000101043b000c00000001001d000002140110009c0000004c0000213d000000a401700370000000000201043b000000000102004b0000000001000019000000010100c039000b00000002001d000000000112004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000201000039000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000c020000290000000000200435000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000d00000002001d000c00000003001d0000000002320436000a00000002001d00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000c0200006b000004c40000c13d0000000a04000029000004ce0000013d0000000002000416000000240110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000401000039000000200010043f000000400200003900000000010000190842080e0000040f000000000101041a000000ff011001900000000001000019000000010100c039000000800010043f0000022b01000041000008430001042e0000000001000416000000000101004b0000004c0000c13d0000000001000412000d00000001001d001500000001001d001400000000001d0000000001000415000000150110008a0000000501100210084208240000040f084207ba0000040f0013000d0000002d001200200000003d000c00000001001d0000000001000415000000130110008a0000000501100210084208240000040f084207ba0000040f0011000d0000002d001000400000003d000b00000001001d0000000001000415000000110110008a0000000501100210084208240000040f084207ba0000040f0000000c0200002900000020042000390000000003020433000c00000003001d000900000001001d000000400100043d000d00000001001d0000002002100039000a00000002001d0000000001040019084205000000040f00000237030000410000000c020000290000000d04200029000800000004001d000000200140003900000000003104350000000b0200002900000020012000390000000003020433000b00000003001d0000002102400039084205000000040f00000008020000290000000b012000290000002102100039000002370300004100000000003204350000002202100039000000090300002900000020013000390000000003030433000900000003001d084205000000040f0000000b020000290000000c01200029000000090310002900000002023000390000000d01000029000000000021043500000022023000390842051c0000040f0000002001000039000000400200043d000c00000002001d00000000011204360000000d030000290000000003030433000d00000003001d000000000031043500000040022000390000000a01000029084205000000040f0000000d010000290000001f01100039000000200200008a000000000121016f00000040011000390000021202000041000002120310009c00000000010280190000000c04000029000002120340009c000000000402801900000040024002100000006001100210000000000121019f000008430001042e0000000002000416000000840110008c0000004c0000413d000000000102004b0000004c0000c13d0000006401700370000000000201043b000000000102004b0000000001000019000000010100c039000d00000002001d000000000112004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000301000039000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000c00000002001d000b00000003001d0000000002320436000a00000002001d00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000b05000029000000000205004b000004900000c13d0000000a04000029000004990000013d0000000002000416000000640110008c0000004c0000413d000000000102004b0000004c0000c13d0000002401700370000000000101043b000d00000001001d000002140110009c0000004c0000213d0000004401700370000000000101043b000c00000001001d000002140110009c0000004c0000213d0000000401700370000000000101043b00000000001004350000000201000039000000200010043f0000004002000039000b00000002001d00000000010000190842080e0000040f0000000d020000290000000000200435000000200010043f00000000010000190000000b020000290842080e0000040f0000000c020000290000000000200435000000200010043f00000000010000190000000b020000290842080e0000040f000000000101041a000000800010043f0000022b01000041000008430001042e000a00040000003d000580100000003d000200600000003d000180050000003d0000000002000019000002ae0000013d0000000c020000290000000102200039000000070120006c000001590000813d000c00000002001d000000050120021000000006011000290000000201100367000000000101043b000d00000001001d00000000001004350000000a01000029000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700000005020000290842083d0000040f00000001022001900000004c0000613d000000000101043b000000000101041a000000ff01100190000002aa0000c13d000000400200043d0000022d010000410000000000120435000b00000002001d00000004012000390000000d0200002900000000002104350000022e01000041000000000010043900000000010004120000000400100443000000020100002900000024001004430000000001000414000002120210009c0000021201008041000000c0011002100000022f011001c700000001020000290842083d0000040f0000000102200190000004d90000613d000000000201043b00000000010004140000021402200197000000040320008c000002e50000c13d000000030100036700000001030000310000000b080000290000000502300272000002fb0000c13d000003040000013d000002120310009c000002120400004100000000010480190000000b05000029000002120350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f00000230011001c70842083d0000040f00000000030100190000006003300270000102120030019d000002120330019700030000000103550000000102200190000004dd0000613d0000000b080000290000000502300272000003040000613d000000000400001900000005054002100000000006580019000000000551034f000000000505043b00000000005604350000000104400039000000000524004b000002fc0000413d0000001f04300190000003130000613d0000000502200210000000000121034f00000000022800190000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f01300039000000200200008a000000000421016f0000000001840019000000000441004b000000000400001900000001040040390000022c0510009c000004be0000213d0000000104400190000004be0000c13d000000200430008c0000023107000041000000000400001900000000040740190000023105300197000000000605004b00000000060000190000000006072019000002310550009c000000000604c019000000400010043f000000000406004b0000004c0000c13d00000000050804330000022c0450009c0000004c0000213d000000000483001900000000078500190000000003740049000001400530008c0000023108000041000000000500001900000000050840190000023103300197000000000603004b00000000060000190000000006082019000002310330009c000000000605c019000000000306004b0000004c0000c13d000002320310009c000004be0000213d0000014003100039000000400030043f0000000053070434000000000331043600000000050504330000000000530435000000400570003900000000050504330000022c0650009c0000004c0000213d00000040061000390000000000560435000000600570003900000000050504330000022c0650009c0000004c0000213d00000060061000390000000000560435000000800570003900000000050504330000022c0650009c0000004c0000213d00000080061000390000000000560435000000a005100039000000a00670003900000000060604330000000000650435000000c0057000390000000006050433000002140560009c0000004c0000213d000000c0051000390000000000650435000000e0067000390000000008060433000002140680009c0000004c0000213d000000e006100039000000000086043500000100087000390000000008080433000000000908004b0000000009000019000000010900c039000000000998004b0000004c0000c13d00000100091000390000000000890435000001200870003900000000080804330000022c0980009c0000004c0000213d00000000077800190000001f08700039000000000948004b000002310c000041000000000900001900000000090c80190000023108800197000002310a400197000000000ba8004b000000000b000019000000000b0c40190000000008a8013f000002310880009c000000000b09c01900000000080b004b0000004c0000c13d00000000870704340000022c0970009c000004be0000213d0000001f09700039000000000929016f0000003f09900039000000000929016f000000400200043d0000000009920019000000000a29004b000000000a000019000000010a0040390000022c0b90009c000004be0000213d000000010aa00190000004be0000c13d000000400090043f0000000009720436000000000a87001900000000044a004b0000004c0000213d000000000407004b000003a30000613d0000000004000019000000000a940019000000000b840019000000000b0b04330000000000ba04350000002004400039000000000a74004b0000039c0000413d00000000047900190000000000040435000001200410003900000000002404350000000001010433000300000001001d000000000101004b000004da0000613d0000000001030433000b00000001001d0000000001060433000800000001001d0000000001050433000900000001001d0000000d0100002900000000001004350000000a01000029000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000903000029000902140030019b0000000803000029000802140030019b00000001022001900000004c0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000000b0100002900000000001004350000000301000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000400000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000004011000290000000d02000029000000000021041b00000009010000290000000000100435000000200000043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000b020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000400000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000004011000290000000d02000029000000000021041b000000080100002900000000001004350000000101000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000b020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000400000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000004011000290000000d02000029000000000021041b0000000b0100002900000000001004350000000201000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000008020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000009020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000b00000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000b011000290000000d02000029000000000021041b0000000001000414000002120210009c0000021201008041000000c00110021000000233011001c70000800d02000039000000020300003900000234040000410000000305000029084208380000040f0000000101200190000002aa0000c13d0000004c0000013d000000000101043b00000000020000190000000a04000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000004930000413d0000000c0100002900000000021400490842051c0000040f00000002010003670000002402100370000000000202043b0000004401100370000000000301043b0000000c01000029000004b20000013d000000000101043b00000000020000190000000804000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000004a60000413d0000000c0100002900000000021400490842051c0000040f0000000c010000290000000b020000290000000a030000290000000d04000029084207470000040f0000000002010019000000400100043d000d00000001001d0842050d0000040f0000000d0400002900000000014100490000021202000041000002120310009c0000000001028019000002440000013d000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000000101043b00000000020000190000000a040000290000000c05000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000004c80000413d0000000d0100002900000000021400490842051c0000040f00000002010003670000006402100370000000000202043b0000008401100370000000000301043b0000000d010000290000000b04000029000004b30000013d000000000001042f000000400100043d00000235020000410000006c0000013d000000400200043d0000001f0430018f0000000505300272000004ea0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000004e20000413d000000000604004b000004f90000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000021201000041000002120420009c000000000201801900000040012002100000006002300210000000000121019f0000084400010430000000000403004b0000050a0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000005030000413d00000000012300190000000000010435000000000001042d00000020030000390000000004310436000000000302043300000000003404350000004001100039000000000403004b0000051b0000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000534004b000005150000413d000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b000000000200001900000001020040390000022c0310009c000005290000213d0000000102200190000005290000c13d000000400010043f000000000001042d000002360100004100000000001004350000004101000039000000040010043f000002300100004100000844000104300006000000000002000600000001001d00000000001004350000000401000039000400000001001d000000200010043f00000212010000410000000002000414000002120320009c0000000002018019000000c00120021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000101041a000000ff01100190000007110000c13d000000400200043d0000022d010000410000000000120435000500000002001d0000000401200039000000060200002900000000002104350000022e010000410000000000100439000000000100041200000004001004430000006001000039000000240010044300000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022f011001c700008005020000390842083d0000040f00000001022001900000071a0000613d000000000201043b00000000010004140000021402200197000000040320008c000005620000c13d00000003010003670000000103000031000005740000013d0000021203000041000002120410009c00000000010380190000000505000029000002120450009c00000000030540190000004003300210000000c001100210000000000131019f00000230011001c70842083d0000040f00000000030100190000006003300270000102120030019d000002120330019700030000000103550000000102200190000007240000613d00000005080000290000001f0230018f0000000504300272000005810000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000005790000413d000000000502004b000005900000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000000200200008a000000000421016f0000000001840019000000000441004b000000000400001900000001040040390000022c0510009c000007140000213d0000000104400190000007140000c13d0000023104000041000000200530008c000000000500001900000000050440190000023106300197000000000706004b000000000400a019000002310660009c000000000405c019000000400010043f000000000404004b000007120000c13d00000000050804330000022c0450009c000007120000213d0000000004830019000000000785001900000000037400490000023105000041000001400630008c000000000600001900000000060540190000023103300197000000000803004b000000000500a019000002310330009c000000000506c019000000000305004b000007120000c13d000002320310009c000007140000213d0000014003100039000000400030043f0000000053070434000000000331043600000000050504330000000000530435000000400570003900000000050504330000022c0650009c000007120000213d00000040061000390000000000560435000000600570003900000000050504330000022c0650009c000007120000213d00000060061000390000000000560435000000800570003900000000050504330000022c0650009c000007120000213d00000080061000390000000000560435000000a005100039000000a00670003900000000060604330000000000650435000000c0057000390000000006050433000002140560009c000007120000213d000000c0051000390000000000650435000000e0067000390000000008060433000002140680009c000007120000213d000000e006100039000000000086043500000100087000390000000008080433000000000908004b0000000009000019000000010900c039000000000998004b000007120000c13d00000100091000390000000000890435000001200870003900000000080804330000022c0980009c000007120000213d00000000077800190000001f087000390000023109000041000000000a48004b000000000a000019000000000a0980190000023108800197000002310b400197000000000cb8004b00000000090080190000000008b8013f000002310880009c00000000090ac019000000000809004b000007120000c13d00000000870704340000022c0970009c000007140000213d0000001f09700039000000000929016f0000003f09900039000000000929016f000000400200043d0000000009920019000000000a29004b000000000a000019000000010a0040390000022c0b90009c000007140000213d000000010aa00190000007140000c13d000000400090043f0000000009720436000000000a78001900000000044a004b000007120000213d000000000407004b0000061d0000613d0000000004000019000000000a940019000000000b480019000000000b0b04330000000000ba04350000002004400039000000000a74004b000006160000413d00000000047900190000000000040435000001200410003900000000002404350000000001010433000100000001001d000000000101004b0000071b0000613d0000000001030433000500000001001d0000000001060433000300000001001d0000000001050433000200000001001d000000060100002900000000001004350000000401000029000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f0000000203000029000402140030019b0000000303000029000302140030019b0000000102200190000007120000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b000000050100002900000000001004350000000301000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000200000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000002011000290000000602000029000000000021041b00000004010000290000000000100435000000200000043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000005020000290000000000200435000000200010043f00000212010000410000000002000414000002120320009c0000000002018019000000c00120021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000200000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000002011000290000000602000029000000000021041b000000030100002900000000001004350000000101000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000005020000290000000000200435000000200010043f00000212010000410000000002000414000002120320009c0000000002018019000000c00120021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000200000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000002011000290000000602000029000000000021041b000000050100002900000000001004350000000201000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000003020000290000000000200435000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000004020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000500000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000005011000290000000602000029000000000021041b0000000001000414000002120210009c0000021201008041000000c00110021000000233011001c70000800d02000039000000020300003900000234040000410000000105000029084208380000040f0000000101200190000007120000613d000000000001042d00000000010000190000084400010430000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000000001042f000000400100043d000002350200004100000000002104350000021202000041000002120310009c0000000001028019000000400110021000000217011001c70000084400010430000000400200043d0000001f0430018f0000000505300272000007310000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000007290000413d000000000604004b000007400000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000021201000041000002120420009c000000000201801900000040012002100000006002300210000000000112019f00000844000104300000000057010434000000000607004b0000078a0000613d000000000627004b000007b10000a13d00000000082300190000000006270049000000000887004b00000000060380190000022c0360009c000007ab0000213d000000050a6002100000003f03a000390000023908300197000000400300043d0000000008830019000000000938004b000000000900001900000001090040390000022c0b80009c000007ab0000213d0000000109900190000007ab0000c13d000000400080043f00000000086304360000001f09a0018f000000050aa002720000076e0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed80019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000007660000413d000000000909004b000007700000613d000000000906004b000007880000613d000000000404004b000007920000613d000000010400008a0000000009000019000000000a290019000000000a4a013f000000000aa70019000000000b010433000000000bab004b000007a50000a13d000000000b030433000000000b9b004b000007a50000a13d000000050b900210000000000b8b0019000000050aa00210000000000aa50019000000000a0a04330000000000ab04350000000109900039000000000a69004b000007760000413d0000000001030019000000000001042d000000400300043d0000023a0130009c000007ab0000213d0000002001300039000000400010043f00000000000304350000000001030019000000000001042d000000000400001900000000072400190000000009010433000000000979004b000007a50000a13d0000000009030433000000000949004b000007a50000a13d0000000509400210000000000989001900000005077002100000000007750019000000000707043300000000007904350000000104400039000000000764004b000007930000413d0000000001030019000000000001042d000002360100004100000000001004350000003201000039000000040010043f00000230010000410000084400010430000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000400100043d000002380200004100000000002104350000021202000041000002120310009c0000000001028019000000400110021000000217011001c700000844000104300000023b0210009c000007bf0000413d00000040030000390000023b4210012a000007c90000013d0000023c3210012a0000023d0310009c000000000201a0190000023d0310009c000000000300001900000020030020390000023e0420009c00000010033081bf0000023f022081970000023e4220812a000002400420009c00000008033080390000022c02208197000002404220812a000027100420008c00000004033080390000021202208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b000000000600001900000001060040390000022c0740009c000008070000213d0000000106600190000008070000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f0000000506600272000007f60000613d0000000007000031000000020770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000007ee0000413d000000000405004b000007f80000613d00000000033200190000002103300039000000090510008c0000000a5110011a0000000305500210000002410550021f0000024205500197000000010330008a00000000060304330000024306600197000000000556019f0000000000530435000007fa0000213d0000000001020019000000000001042d000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000000001042f0000021203000041000002120410009c00000000010380190000004001100210000002120420009c00000000020380190000006002200210000000000112019f0000000002000414000002120420009c0000000002038019000000c002200210000000000112019f00000233011001c700008010020000390842083d0000040f0000000102200190000008220000613d000000000101043b000000000001042d000000000100001900000844000104300000022e0200004100000000002004390000000501100270000000000201003100000004002004430000000101010031000000240010044300000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022f011001c700008005020000390842083d0000040f0000000102200190000008370000613d000000000101043b000000000001042d000000000001042f0000083b002104210000000102000039000000000001042d0000000002000019000000000001042d00000840002104230000000102000039000000000001042d0000000002000019000000000001042d0000084200000432000008430001042e000008440001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000020000000000000000000000000000014000000100000000000000000083780ffe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000715ecdf500000000000000000000000000000000000000000000000000000000b616352900000000000000000000000000000000000000000000000000000000ea51994a00000000000000000000000000000000000000000000000000000000ea51994b00000000000000000000000000000000000000000000000000000000ec864cba00000000000000000000000000000000000000000000000000000000b616352a00000000000000000000000000000000000000000000000000000000bbbdc81800000000000000000000000000000000000000000000000000000000715ecdf60000000000000000000000000000000000000000000000000000000089a82fbe00000000000000000000000000000000000000000000000000000000af288efe0000000000000000000000000000000000000000000000000000000054fd4d4f0000000000000000000000000000000000000000000000000000000054fd4d500000000000000000000000000000000000000000000000000000000063bbf81b0000000000000000000000000000000000000000000000000000000065c40b9c000000000000000000000000000000000000000000000000000000002412e9cc00000000000000000000000000000000000000000000000000000000288a0a7b000000000000000000000000000000000000000000000000000000002f45f90e020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffa3112a6400000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000240000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf02000000000000000000000000000000000000000000000000000000000000002178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf9bd8ba84d000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000001da1572000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffdf0000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e4f264bc04d664e0f2878a0827bb419079824ea8e92d28842f33fdfb754230c\",\n  \"entries\": [\n    {\n      \"constructorArgs\": [\"0x21d8d4eE83b80bc0Cc0f2B7df3117Cf212d02901\"],\n      \"salt\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n      \"deploymentType\": \"create\",\n      \"factoryDeps\": [],\n      \"address\": \"0x8AdA7852df64A66ca89EFc82144e6be71Bd53B4E\",\n      \"txHash\": \"0xd1c8be34cfc5bf191084b233bc617164bed5955c080e65b15a044bf4cd7975bf\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/zksync/SchemaRegistry.json",
    "content": "{\n  \"address\": \"0xB8566376dFe68B76FA985D5448cc2FbD578412a2\",\n  \"sourceName\": \"contracts/SchemaRegistry.sol\",\n  \"contractName\": \"SchemaRegistry\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"AlreadyExists\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"registerer\",\n          \"type\": \"address\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"indexed\": false,\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"schema\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"Registered\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"uid\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getSchema\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"uid\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract ISchemaResolver\",\n              \"name\": \"resolver\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"revocable\",\n              \"type\": \"bool\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"schema\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct SchemaRecord\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"schema\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"contract ISchemaResolver\",\n          \"name\": \"resolver\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"revocable\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"version\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"bytecode\": \"0x0002000000000002000e000000000002000100000001035500000000030100190000006003300270000000d30030019d000000d30330019700000001022001900000006b0000c13d0000008009000039000000400090043f000000040230008c000002750000413d000000000201043b000000e002200270000000d50420009c000000810000613d000000d60420009c000000a40000613d000000d70120009c000002750000c13d0000000001000416000000000101004b000002750000c13d0000000001000412000800000001001d000e00000001001d000d00000000001d00000000010004150000000e0110008a0000000501100210034503270000040f034502d30000040f000c00080000002d000b00200000003d000700000001001d00000000010004150000000c0110008a0000000501100210034503270000040f034502d30000040f000a00080000002d000900400000003d000600000001001d00000000010004150000000a0110008a0000000501100210034503270000040f034502d30000040f000000070200002900000020042000390000000003020433000700000003001d000500000001001d000000400100043d000800000001001d00000020021000390000000001040019034502770000040f000000e90300004100000007020000290000000804200029000400000004001d00000020014000390000000000310435000000060200002900000020012000390000000003020433000600000003001d0000002102400039034502770000040f000000040200002900000006012000290000002102100039000000e90300004100000000003204350000002202100039000000050300002900000020013000390000000003030433000500000003001d034502770000040f0000000602000029000000070120002900000005031000290000000202300039000000080100002900000000002104350000002202300039034502c00000040f0000002001000039000000400200043d000700000002001d00000000021204360000000801000029034502840000040f00000007040000290000000001410049000000d302000041000000d30310009c0000000001028019000000d30340009c000000000402801900000040024002100000006001100210000000000121019f000003460001042e000000e001000039000000400010043f0000000001000416000000000101004b000002750000c13d0000000101000039000000800010043f0000000302000039000000a00020043f000000c00000043f0000014000000443000001600010044300000020010000390000018000100443000001a0002004430000004003000039000001c000300443000001e00000044300000100001004430000012000200443000000d401000041000003460001042e0000000002000416000000240330008c000002750000413d000000000202004b000002750000c13d0000010002000039000000400020043f000000800000043f000000a00000043f000000c00000043f0000006002000039000000e00020043f0000000401100370000000000101043b0000000000100435000000200000043f000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000d8011001c70000801002000039034503400000040f0000000102200190000002750000613d000000400500043d000000d90250009c000001a70000a13d000000e70100004100000000001004350000004101000039000000040010043f000000e80100004100000347000104300000000002000416000000640430008c000002750000413d000000000202004b000002750000c13d0000000402100370000000000502043b000000dd0250009c000002750000213d0000002302500039000000000232004b000002750000813d0000000404500039000000000241034f000000000202043b000000dd0620009c000002750000213d00000000052500190000002405500039000000000335004b000002750000213d0000002403100370000000000303043b000000da05300197000000da0330009c000002750000213d0000004403100370000000000603043b000000000306004b0000000003000019000000010300c039000000000336004b000002750000c13d0000010003000039000000400030043f000000800000043f000000a00050043f000000c00060043f0000001f05200039000000200a00008a0000000005a5016f0000003f055000390000000005a5016f000000de0650009c0000009e0000813d0000010005500039000000400050043f0000002004400039000000000141034f0000001f0420018f000001000020043f0000000505200272000000e20000613d00000000060000190000000507600210000000000871034f000000000808043b000001200770003900000000008704350000000106600039000000000756004b000000da0000413d000000000604004b000000f10000613d0000000505500210000000000151034f00000003044002100000012005500039000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000120012000390000000000010435000000e00030043f000000c00400043d000000a00500043d000000400100043d0000002002100039000001000300043d000000000603004b000001030000613d000000000600001900000000072600190000012008600039000000000808043300000000008704350000002006600039000000000736004b000000fc0000413d000000000623001900000000000604350000006005500210000000000613001900000020076000390000000000570435000000df05000041000000000404004b0000000005006019000000340460003900000000005404350000001504300039000000000041043500000054033000390000000004a3016f0000000003140019000000000443004b00000000040000190000000104004039000000dd0530009c0000009e0000213d00000001044001900000009e0000c13d00080000000a001d000000400030043f000000d304000041000000d30320009c000000000204801900000040022002100000000001010433000000d30310009c00000000010480190000006001100210000000000121019f0000000002000414000000d30320009c0000000002048019000000c002200210000000000112019f000000e0011001c70000801002000039000700000009001d034503400000040f0000000102200190000002750000613d000000000101043b000600000001001d0000000000100435000000200000043f0000000001000414000000d30210009c000000d301008041000000c001100210000000d8011001c70000801002000039034503400000040f0000000102200190000002750000613d000000000101043b000000000101041a000000000101004b000001fe0000c13d0000000601000029000000800010043f0000000000100435000000200000043f000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000d8011001c70000801002000039034503400000040f0000000102200190000002750000613d000000000101043b000000800200043d000000000021041b000000e302000041000000c00300043d000000000303004b0000000002006019000000a00300043d000000da033001970000000104100039000000000504041a000000e405500197000000000335019f000000000223019f000000000024041b000000e00200043d000400000002001d0000000032020434000300000003001d000500000002001d000000dd0220009c0000009e0000213d0000000201100039000200000001001d000000000101041a000000010210019000000001011002700000007f0310018f000000000301c019000100000003001d0000001f0130008c00000000010000190000000101002039000000000112004b000001c10000c13d0000000101000029000000200110008c000001920000413d00000002010000290000000000100435000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000dc011001c70000801002000039034503400000040f0000000102200190000002750000613d00000005030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000001920000813d000000000002041b0000000102200039000000000312004b0000018e0000413d00000005010000290000001f0110008c000002070000a13d00000002010000290000000000100435000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000dc011001c70000801002000039034503400000040f0000000102200190000002750000613d00000005030000290000000803300180000000000101043b000002150000c13d0000002002000039000002200000013d000000000101043b0000008002500039000000400020043f000000000201041a00000000022504360000000103100039000000000303041a000000da0430019700000000004204350000004002500039000000db033001980000000003000019000000010300c03900000000003204350000000201100039000000000701041a000000010370019000000001067002700000007f0260018f00000000060260190000001f0460008c00000000040000190000000104002039000000000447013f0000000104400190000001c70000613d000000e70100004100000000001004350000002201000039000000040010043f000000e8010000410000034700010430000700000005001d000000400500043d0000000004650436000000000303004b000800000005001d000001df0000c13d000001000100008a000000000117016f0000000000140435000000000102004b0000002002000039000000000200601900000020022000390000000001050019034502c00000040f0000000702000029000000600120003900000008030000290000000000310435000000400100043d000800000001001d034502970000040f0000000804000029000000610000013d000400000007001d000500000004001d000600000006001d0000000000100435000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000dc011001c70000801002000039034503400000040f0000000102200190000002750000613d0000000402000029000000020220008c0000000002000019000000080500002900000006060000290000000507000029000001d30000413d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b000001f60000413d000001d30000013d000000400100043d000000e1020000410000000000210435000000d302000041000000d30310009c00000000010280190000004001100210000000e2011001c70000034700010430000000050100006b00000000010000190000020c0000613d0000000301000029000000000101043300000005040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000022f0000013d00000020020000390000000004000019000000040600002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000002180000413d000000050330006c0000022c0000813d00000005030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f00000004022000290000000002020433000000000232016f000000000021041b0000000501000029000000010110021000000001011001bf0000000202000029000000000012041b0000002002000039000000400100043d0000000002210436000000800300043d0000000000320435000000a00200043d000000da0220019700000040031000390000000000230435000000c00200043d000000000202004b0000000002000019000000010200c039000000600310003900000000002304350000008002100039000000e00300043d00000007040000290000000000420435000000a004100039000000003203043400000000002404350000000006000411000000c004100039000000000502004b000002530000613d000000000500001900000000074500190000000008530019000000000808043300000000008704350000002005500039000000000725004b0000024c0000413d000000000342001900000000000304350000001f02200039000000080220017f000000d304000041000000d30310009c00000000010480190000004001100210000000c002200039000000d30320009c00000000020480190000006002200210000000000112019f0000000002000414000000d30320009c0000000002048019000000c002200210000000000112019f000000e0011001c70000800d020000390000000303000039000000e50400004100000006050000290345033b0000040f0000000101200190000002750000613d000000400100043d00000006020000290000000000210435000000d30210009c000000d3010080410000004001100210000000e6011001c7000003460001042e00000000010000190000034700010430000000000403004b000002810000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b0000027a0000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000203004b000002900000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b000002890000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d00000020030000390000000003310436000000005402043400000000004304350000000003050433000000da033001970000004004100039000000000034043500000040032000390000000003030433000000000303004b0000000003000019000000010300c0390000006004100039000000000034043500000060022000390000000002020433000000800310003900000080040000390000000000430435000000a00410003900000000320204340000000000240435000000c001100039000000000402004b000002b90000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000524004b000002b20000413d000000000312001900000000000304350000001f02200039000000200300008a000000000232016f0000000001120019000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000000dd0310009c000002cd0000213d0000000102200190000002cd0000c13d000000400010043f000000000001042d000000e70100004100000000001004350000004101000039000000040010043f000000e8010000410000034700010430000000ea0210009c000002d80000413d0000004003000039000000ea4210012a000002e20000013d000000eb3210012a000000ec0310009c000000000201a019000000ec0310009c00000000030000190000002003002039000000ed0420009c00000010033081bf000000ee02208197000000ed4220812a000000ef0420009c0000000803308039000000dd02208197000000ef4220812a000027100420008c0000000403308039000000d302208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b00000000060000190000000106004039000000dd0740009c000003200000213d0000000106600190000003200000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f00000005066002720000030f0000613d0000000007000031000000010770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000003070000413d000000000405004b000003110000613d00000000033200190000002103300039000000090510008c0000000a5110011a0000000305500210000000f00550021f000000f105500197000000010330008a0000000006030433000000f206600197000000000556019f0000000000530435000003130000213d0000000001020019000000000001042d000000e70100004100000000001004350000004101000039000000040010043f000000e8010000410000034700010430000000000001042f000000f302000041000000000020043900000005011002700000000002010031000000040020044300000001010100310000002400100443000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000f4011001c70000800502000039034503400000040f00000001022001900000033a0000613d000000000101043b000000000001042d000000000001042f0000033e002104210000000102000039000000000001042d0000000002000019000000000001042d00000343002104230000000102000039000000000001042d0000000002000019000000000001042d0000034500000432000003460001042e0000034700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000a2ea7c6e0000000000000000000000000000000000000000000000000000000060d7a2780000000000000000000000000000000000000000000000000000000054fd4d500200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000ff00000000000000000000000000000000000000000200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000023369fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000d0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e00000000000000000000000000000000000000200000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000006961adf2a241e1b40834fbd167d8a2cf1b79ba8bd33de8a935daa1ffe159be73\",\n  \"entries\": [\n    {\n      \"constructorArgs\": [],\n      \"salt\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n      \"deploymentType\": \"create\",\n      \"factoryDeps\": [],\n      \"address\": \"0xB8566376dFe68B76FA985D5448cc2FbD578412a2\",\n      \"txHash\": \"0xa177e921466a11627432e91b957261ef19fe5ed97fd0d4db07ade088b6a31b11\"\n    }\n  ]\n}\n"
  },
  {
    "path": "deployments/zksync/types/contracts/EAS.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type AttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n};\n\nexport type AttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput\n] & { schema: string; data: AttestationRequestDataStructOutput };\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type AttestationStruct = {\n  uid: BytesLike;\n  schema: BytesLike;\n  time: BigNumberish;\n  expirationTime: BigNumberish;\n  revocationTime: BigNumberish;\n  refUID: BytesLike;\n  recipient: AddressLike;\n  attester: AddressLike;\n  revocable: boolean;\n  data: BytesLike;\n};\n\nexport type AttestationStructOutput = [\n  uid: string,\n  schema: string,\n  time: bigint,\n  expirationTime: bigint,\n  revocationTime: bigint,\n  refUID: string,\n  recipient: string,\n  attester: string,\n  revocable: boolean,\n  data: string\n] & {\n  uid: string;\n  schema: string;\n  time: bigint;\n  expirationTime: bigint;\n  revocationTime: bigint;\n  refUID: string;\n  recipient: string;\n  attester: string;\n  revocable: boolean;\n  data: string;\n};\n\nexport type MultiAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n};\n\nexport type MultiAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[]\n] & { schema: string; data: AttestationRequestDataStructOutput[] };\n\nexport type MultiDelegatedAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n};\n\nexport type MultiRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[]\n] & { schema: string; data: RevocationRequestDataStructOutput[] };\n\nexport type MultiDelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n};\n\nexport type RevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput\n] & { schema: string; data: RevocationRequestDataStructOutput };\n\nexport type DelegatedRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EASInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attest\"\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttestation\"\n      | \"getDomainSeparator\"\n      | \"getName\"\n      | \"getNonce\"\n      | \"getRevokeOffchain\"\n      | \"getRevokeTypeHash\"\n      | \"getSchemaRegistry\"\n      | \"getTimestamp\"\n      | \"increaseNonce\"\n      | \"isAttestationValid\"\n      | \"multiAttest\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevoke\"\n      | \"multiRevokeByDelegation\"\n      | \"multiRevokeOffchain\"\n      | \"multiTimestamp\"\n      | \"revoke\"\n      | \"revokeByDelegation\"\n      | \"revokeOffchain\"\n      | \"timestamp\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(\n    nameOrSignatureOrTopic:\n      | \"Attested\"\n      | \"EIP712DomainChanged\"\n      | \"NonceIncreased\"\n      | \"Revoked\"\n      | \"RevokedOffchain\"\n      | \"Timestamped\"\n  ): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attest\",\n    values: [AttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getNonce\",\n    values: [AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeOffchain\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaRegistry\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getTimestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"increaseNonce\",\n    values: [BigNumberish]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationValid\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttest\",\n    values: [MultiAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevoke\",\n    values: [MultiRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeOffchain\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiTimestamp\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revoke\",\n    values: [RevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeOffchain\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"timestamp\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"attest\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getNonce\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaRegistry\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"increaseNonce\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationValid\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttest\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevoke\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiTimestamp\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"revoke\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeOffchain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"timestamp\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace AttestedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace NonceIncreasedEvent {\n  export type InputTuple = [oldNonce: BigNumberish, newNonce: BigNumberish];\n  export type OutputTuple = [oldNonce: bigint, newNonce: bigint];\n  export interface OutputObject {\n    oldNonce: bigint;\n    newNonce: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedEvent {\n  export type InputTuple = [\n    recipient: AddressLike,\n    attester: AddressLike,\n    uid: BytesLike,\n    schemaUID: BytesLike\n  ];\n  export type OutputTuple = [\n    recipient: string,\n    attester: string,\n    uid: string,\n    schemaUID: string\n  ];\n  export interface OutputObject {\n    recipient: string;\n    attester: string;\n    uid: string;\n    schemaUID: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace RevokedOffchainEvent {\n  export type InputTuple = [\n    revoker: AddressLike,\n    data: BytesLike,\n    timestamp: BigNumberish\n  ];\n  export type OutputTuple = [revoker: string, data: string, timestamp: bigint];\n  export interface OutputObject {\n    revoker: string;\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport namespace TimestampedEvent {\n  export type InputTuple = [data: BytesLike, timestamp: BigNumberish];\n  export type OutputTuple = [data: string, timestamp: bigint];\n  export interface OutputObject {\n    data: string;\n    timestamp: bigint;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EAS extends BaseContract {\n  connect(runner?: ContractRunner | null): EAS;\n  waitForDeployment(): Promise<this>;\n\n  interface: EASInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attest: TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttestation: TypedContractMethod<\n    [uid: BytesLike],\n    [AttestationStructOutput],\n    \"view\"\n  >;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getNonce: TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n\n  getRevokeOffchain: TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getSchemaRegistry: TypedContractMethod<[], [string], \"view\">;\n\n  getTimestamp: TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n\n  increaseNonce: TypedContractMethod<\n    [newNonce: BigNumberish],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationValid: TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n\n  multiAttest: TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevoke: TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  multiRevokeOffchain: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  multiTimestamp: TypedContractMethod<\n    [data: BytesLike[]],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  revoke: TypedContractMethod<\n    [request: RevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  revokeOffchain: TypedContractMethod<\n    [data: BytesLike],\n    [bigint],\n    \"nonpayable\"\n  >;\n\n  timestamp: TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attest\"\n  ): TypedContractMethod<\n    [request: AttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttestation\"\n  ): TypedContractMethod<[uid: BytesLike], [AttestationStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getNonce\"\n  ): TypedContractMethod<[account: AddressLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeOffchain\"\n  ): TypedContractMethod<\n    [revoker: AddressLike, data: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaRegistry\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getTimestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"increaseNonce\"\n  ): TypedContractMethod<[newNonce: BigNumberish], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationValid\"\n  ): TypedContractMethod<[uid: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttest\"\n  ): TypedContractMethod<\n    [multiRequests: MultiAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevoke\"\n  ): TypedContractMethod<\n    [multiRequests: MultiRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"multiTimestamp\"\n  ): TypedContractMethod<[data: BytesLike[]], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"revoke\"\n  ): TypedContractMethod<[request: RevocationRequestStruct], [void], \"payable\">;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeOffchain\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"timestamp\"\n  ): TypedContractMethod<[data: BytesLike], [bigint], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Attested\"\n  ): TypedContractEvent<\n    AttestedEvent.InputTuple,\n    AttestedEvent.OutputTuple,\n    AttestedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"NonceIncreased\"\n  ): TypedContractEvent<\n    NonceIncreasedEvent.InputTuple,\n    NonceIncreasedEvent.OutputTuple,\n    NonceIncreasedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Revoked\"\n  ): TypedContractEvent<\n    RevokedEvent.InputTuple,\n    RevokedEvent.OutputTuple,\n    RevokedEvent.OutputObject\n  >;\n  getEvent(\n    key: \"RevokedOffchain\"\n  ): TypedContractEvent<\n    RevokedOffchainEvent.InputTuple,\n    RevokedOffchainEvent.OutputTuple,\n    RevokedOffchainEvent.OutputObject\n  >;\n  getEvent(\n    key: \"Timestamped\"\n  ): TypedContractEvent<\n    TimestampedEvent.InputTuple,\n    TimestampedEvent.OutputTuple,\n    TimestampedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Attested(address,address,bytes32,bytes32)\": TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n    Attested: TypedContractEvent<\n      AttestedEvent.InputTuple,\n      AttestedEvent.OutputTuple,\n      AttestedEvent.OutputObject\n    >;\n\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n\n    \"NonceIncreased(uint256,uint256)\": TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n    NonceIncreased: TypedContractEvent<\n      NonceIncreasedEvent.InputTuple,\n      NonceIncreasedEvent.OutputTuple,\n      NonceIncreasedEvent.OutputObject\n    >;\n\n    \"Revoked(address,address,bytes32,bytes32)\": TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n    Revoked: TypedContractEvent<\n      RevokedEvent.InputTuple,\n      RevokedEvent.OutputTuple,\n      RevokedEvent.OutputObject\n    >;\n\n    \"RevokedOffchain(address,bytes32,uint64)\": TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n    RevokedOffchain: TypedContractEvent<\n      RevokedOffchainEvent.InputTuple,\n      RevokedOffchainEvent.OutputTuple,\n      RevokedOffchainEvent.OutputObject\n    >;\n\n    \"Timestamped(bytes32,uint64)\": TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n    Timestamped: TypedContractEvent<\n      TimestampedEvent.InputTuple,\n      TimestampedEvent.OutputTuple,\n      TimestampedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/zksync/types/contracts/Indexer.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport interface IndexerInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"getEAS\"\n      | \"getReceivedAttestationUIDCount\"\n      | \"getReceivedAttestationUIDs\"\n      | \"getSchemaAttestationUIDCount\"\n      | \"getSchemaAttestationUIDs\"\n      | \"getSchemaAttesterRecipientAttestationUIDCount\"\n      | \"getSchemaAttesterRecipientAttestationUIDs\"\n      | \"getSentAttestationUIDCount\"\n      | \"getSentAttestationUIDs\"\n      | \"indexAttestation\"\n      | \"indexAttestations\"\n      | \"isAttestationIndexed\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Indexed\"): EventFragment;\n\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    values: [BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    values: [BytesLike, AddressLike, AddressLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    values: [\n      BytesLike,\n      AddressLike,\n      AddressLike,\n      BigNumberish,\n      BigNumberish,\n      boolean\n    ]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDCount\",\n    values: [AddressLike, BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getSentAttestationUIDs\",\n    values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestation\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"indexAttestations\",\n    values: [BytesLike[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"isAttestationIndexed\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getReceivedAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSchemaAttesterRecipientAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDCount\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getSentAttestationUIDs\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"indexAttestations\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"isAttestationIndexed\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace IndexedEvent {\n  export type InputTuple = [uid: BytesLike];\n  export type OutputTuple = [uid: string];\n  export interface OutputObject {\n    uid: string;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface Indexer extends BaseContract {\n  connect(runner?: ContractRunner | null): Indexer;\n  waitForDeployment(): Promise<this>;\n\n  interface: IndexerInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getReceivedAttestationUIDCount: TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getReceivedAttestationUIDs: TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  getSentAttestationUIDCount: TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n\n  getSentAttestationUIDs: TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n\n  indexAttestation: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [void],\n    \"nonpayable\"\n  >;\n\n  indexAttestations: TypedContractMethod<\n    [attestationUIDs: BytesLike[]],\n    [void],\n    \"nonpayable\"\n  >;\n\n  isAttestationIndexed: TypedContractMethod<\n    [attestationUID: BytesLike],\n    [boolean],\n    \"view\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDCount\"\n  ): TypedContractMethod<\n    [recipient: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getReceivedAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      recipient: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDCount\"\n  ): TypedContractMethod<[schemaUID: BytesLike], [bigint], \"view\">;\n  getFunction(\n    nameOrSignature: \"getSchemaAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDCount\"\n  ): TypedContractMethod<\n    [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSchemaAttesterRecipientAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      schemaUID: BytesLike,\n      attester: AddressLike,\n      recipient: AddressLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDCount\"\n  ): TypedContractMethod<\n    [attester: AddressLike, schemaUID: BytesLike],\n    [bigint],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getSentAttestationUIDs\"\n  ): TypedContractMethod<\n    [\n      attester: AddressLike,\n      schemaUID: BytesLike,\n      start: BigNumberish,\n      length: BigNumberish,\n      reverseOrder: boolean\n    ],\n    [string[]],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"indexAttestation\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"indexAttestations\"\n  ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], \"nonpayable\">;\n  getFunction(\n    nameOrSignature: \"isAttestationIndexed\"\n  ): TypedContractMethod<[attestationUID: BytesLike], [boolean], \"view\">;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Indexed\"\n  ): TypedContractEvent<\n    IndexedEvent.InputTuple,\n    IndexedEvent.OutputTuple,\n    IndexedEvent.OutputObject\n  >;\n\n  filters: {\n    \"Indexed(bytes32)\": TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n    Indexed: TypedContractEvent<\n      IndexedEvent.InputTuple,\n      IndexedEvent.OutputTuple,\n      IndexedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/zksync/types/contracts/SchemaRegistry.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../common\";\n\nexport type SchemaRecordStruct = {\n  uid: BytesLike;\n  resolver: AddressLike;\n  revocable: boolean;\n  schema: string;\n};\n\nexport type SchemaRecordStructOutput = [\n  uid: string,\n  resolver: string,\n  revocable: boolean,\n  schema: string\n] & { uid: string; resolver: string; revocable: boolean; schema: string };\n\nexport interface SchemaRegistryInterface extends Interface {\n  getFunction(\n    nameOrSignature: \"getSchema\" | \"register\" | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"Registered\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"getSchema\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"register\",\n    values: [string, AddressLike, boolean]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(functionFragment: \"getSchema\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"register\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace RegisteredEvent {\n  export type InputTuple = [\n    uid: BytesLike,\n    registerer: AddressLike,\n    schema: SchemaRecordStruct\n  ];\n  export type OutputTuple = [\n    uid: string,\n    registerer: string,\n    schema: SchemaRecordStructOutput\n  ];\n  export interface OutputObject {\n    uid: string;\n    registerer: string;\n    schema: SchemaRecordStructOutput;\n  }\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface SchemaRegistry extends BaseContract {\n  connect(runner?: ContractRunner | null): SchemaRegistry;\n  waitForDeployment(): Promise<this>;\n\n  interface: SchemaRegistryInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  getSchema: TypedContractMethod<\n    [uid: BytesLike],\n    [SchemaRecordStructOutput],\n    \"view\"\n  >;\n\n  register: TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"getSchema\"\n  ): TypedContractMethod<[uid: BytesLike], [SchemaRecordStructOutput], \"view\">;\n  getFunction(\n    nameOrSignature: \"register\"\n  ): TypedContractMethod<\n    [schema: string, resolver: AddressLike, revocable: boolean],\n    [string],\n    \"nonpayable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"Registered\"\n  ): TypedContractEvent<\n    RegisteredEvent.InputTuple,\n    RegisteredEvent.OutputTuple,\n    RegisteredEvent.OutputObject\n  >;\n\n  filters: {\n    \"Registered(bytes32,address,tuple)\": TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n    Registered: TypedContractEvent<\n      RegisteredEvent.InputTuple,\n      RegisteredEvent.OutputTuple,\n      RegisteredEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/zksync/types/contracts/eip712/proxy/EIP712Proxy.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport type {\n  BaseContract,\n  BigNumberish,\n  BytesLike,\n  FunctionFragment,\n  Result,\n  Interface,\n  EventFragment,\n  AddressLike,\n  ContractRunner,\n  ContractMethod,\n  Listener,\n} from \"ethers\";\nimport type {\n  TypedContractEvent,\n  TypedDeferredTopicFilter,\n  TypedEventLog,\n  TypedLogDescription,\n  TypedListener,\n  TypedContractMethod,\n} from \"../../../common\";\n\nexport type AttestationRequestDataStruct = {\n  recipient: AddressLike;\n  expirationTime: BigNumberish;\n  revocable: boolean;\n  refUID: BytesLike;\n  data: BytesLike;\n  value: BigNumberish;\n};\n\nexport type AttestationRequestDataStructOutput = [\n  recipient: string,\n  expirationTime: bigint,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  value: bigint\n] & {\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: string;\n  value: bigint;\n};\n\nexport type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike };\n\nexport type SignatureStructOutput = [v: bigint, r: string, s: string] & {\n  v: bigint;\n  r: string;\n  s: string;\n};\n\nexport type DelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct;\n  signature: SignatureStruct;\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  attester: string;\n  deadline: bigint;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStruct = {\n  schema: BytesLike;\n  data: AttestationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  attester: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyAttestationRequestStructOutput = [\n  schema: string,\n  data: AttestationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  attester: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: AttestationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  attester: string;\n  deadline: bigint;\n};\n\nexport type RevocationRequestDataStruct = {\n  uid: BytesLike;\n  value: BigNumberish;\n};\n\nexport type RevocationRequestDataStructOutput = [uid: string, value: bigint] & {\n  uid: string;\n  value: bigint;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct[];\n  signatures: SignatureStruct[];\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type MultiDelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput[],\n  signatures: SignatureStructOutput[],\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput[];\n  signatures: SignatureStructOutput[];\n  revoker: string;\n  deadline: bigint;\n};\n\nexport type DelegatedProxyRevocationRequestStruct = {\n  schema: BytesLike;\n  data: RevocationRequestDataStruct;\n  signature: SignatureStruct;\n  revoker: AddressLike;\n  deadline: BigNumberish;\n};\n\nexport type DelegatedProxyRevocationRequestStructOutput = [\n  schema: string,\n  data: RevocationRequestDataStructOutput,\n  signature: SignatureStructOutput,\n  revoker: string,\n  deadline: bigint\n] & {\n  schema: string;\n  data: RevocationRequestDataStructOutput;\n  signature: SignatureStructOutput;\n  revoker: string;\n  deadline: bigint;\n};\n\nexport interface EIP712ProxyInterface extends Interface {\n  getFunction(\n    nameOrSignature:\n      | \"attestByDelegation\"\n      | \"eip712Domain\"\n      | \"getAttestTypeHash\"\n      | \"getAttester\"\n      | \"getDomainSeparator\"\n      | \"getEAS\"\n      | \"getName\"\n      | \"getRevokeTypeHash\"\n      | \"multiAttestByDelegation\"\n      | \"multiRevokeByDelegation\"\n      | \"revokeByDelegation\"\n      | \"version\"\n  ): FunctionFragment;\n\n  getEvent(nameOrSignatureOrTopic: \"EIP712DomainChanged\"): EventFragment;\n\n  encodeFunctionData(\n    functionFragment: \"attestByDelegation\",\n    values: [DelegatedProxyAttestationRequestStruct]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"eip712Domain\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttestTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getAttester\",\n    values: [BytesLike]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"getDomainSeparator\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(functionFragment: \"getEAS\", values?: undefined): string;\n  encodeFunctionData(functionFragment: \"getName\", values?: undefined): string;\n  encodeFunctionData(\n    functionFragment: \"getRevokeTypeHash\",\n    values?: undefined\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiAttestByDelegation\",\n    values: [MultiDelegatedProxyAttestationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"multiRevokeByDelegation\",\n    values: [MultiDelegatedProxyRevocationRequestStruct[]]\n  ): string;\n  encodeFunctionData(\n    functionFragment: \"revokeByDelegation\",\n    values: [DelegatedProxyRevocationRequestStruct]\n  ): string;\n  encodeFunctionData(functionFragment: \"version\", values?: undefined): string;\n\n  decodeFunctionResult(\n    functionFragment: \"attestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"eip712Domain\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttestTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getAttester\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"getDomainSeparator\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"getEAS\", data: BytesLike): Result;\n  decodeFunctionResult(functionFragment: \"getName\", data: BytesLike): Result;\n  decodeFunctionResult(\n    functionFragment: \"getRevokeTypeHash\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiAttestByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"multiRevokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(\n    functionFragment: \"revokeByDelegation\",\n    data: BytesLike\n  ): Result;\n  decodeFunctionResult(functionFragment: \"version\", data: BytesLike): Result;\n}\n\nexport namespace EIP712DomainChangedEvent {\n  export type InputTuple = [];\n  export type OutputTuple = [];\n  export interface OutputObject {}\n  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;\n  export type Filter = TypedDeferredTopicFilter<Event>;\n  export type Log = TypedEventLog<Event>;\n  export type LogDescription = TypedLogDescription<Event>;\n}\n\nexport interface EIP712Proxy extends BaseContract {\n  connect(runner?: ContractRunner | null): EIP712Proxy;\n  waitForDeployment(): Promise<this>;\n\n  interface: EIP712ProxyInterface;\n\n  queryFilter<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n  queryFilter<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    fromBlockOrBlockhash?: string | number | undefined,\n    toBlock?: string | number | undefined\n  ): Promise<Array<TypedEventLog<TCEvent>>>;\n\n  on<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  on<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  once<TCEvent extends TypedContractEvent>(\n    event: TCEvent,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n  once<TCEvent extends TypedContractEvent>(\n    filter: TypedDeferredTopicFilter<TCEvent>,\n    listener: TypedListener<TCEvent>\n  ): Promise<this>;\n\n  listeners<TCEvent extends TypedContractEvent>(\n    event: TCEvent\n  ): Promise<Array<TypedListener<TCEvent>>>;\n  listeners(eventName?: string): Promise<Array<Listener>>;\n  removeAllListeners<TCEvent extends TypedContractEvent>(\n    event?: TCEvent\n  ): Promise<this>;\n\n  attestByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n\n  eip712Domain: TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n\n  getAttestTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  getAttester: TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n\n  getDomainSeparator: TypedContractMethod<[], [string], \"view\">;\n\n  getEAS: TypedContractMethod<[], [string], \"view\">;\n\n  getName: TypedContractMethod<[], [string], \"view\">;\n\n  getRevokeTypeHash: TypedContractMethod<[], [string], \"view\">;\n\n  multiAttestByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n\n  multiRevokeByDelegation: TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n\n  revokeByDelegation: TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n\n  version: TypedContractMethod<[], [string], \"view\">;\n\n  getFunction<T extends ContractMethod = ContractMethod>(\n    key: string | FunctionFragment\n  ): T;\n\n  getFunction(\n    nameOrSignature: \"attestByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyAttestationRequestStruct],\n    [string],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"eip712Domain\"\n  ): TypedContractMethod<\n    [],\n    [\n      [string, string, string, bigint, string, string, bigint[]] & {\n        fields: string;\n        name: string;\n        version: string;\n        chainId: bigint;\n        verifyingContract: string;\n        salt: string;\n        extensions: bigint[];\n      }\n    ],\n    \"view\"\n  >;\n  getFunction(\n    nameOrSignature: \"getAttestTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getAttester\"\n  ): TypedContractMethod<[uid: BytesLike], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getDomainSeparator\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getEAS\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getName\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"getRevokeTypeHash\"\n  ): TypedContractMethod<[], [string], \"view\">;\n  getFunction(\n    nameOrSignature: \"multiAttestByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]],\n    [string[]],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"multiRevokeByDelegation\"\n  ): TypedContractMethod<\n    [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"revokeByDelegation\"\n  ): TypedContractMethod<\n    [delegatedRequest: DelegatedProxyRevocationRequestStruct],\n    [void],\n    \"payable\"\n  >;\n  getFunction(\n    nameOrSignature: \"version\"\n  ): TypedContractMethod<[], [string], \"view\">;\n\n  getEvent(\n    key: \"EIP712DomainChanged\"\n  ): TypedContractEvent<\n    EIP712DomainChangedEvent.InputTuple,\n    EIP712DomainChangedEvent.OutputTuple,\n    EIP712DomainChangedEvent.OutputObject\n  >;\n\n  filters: {\n    \"EIP712DomainChanged()\": TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n    EIP712DomainChanged: TypedContractEvent<\n      EIP712DomainChangedEvent.InputTuple,\n      EIP712DomainChangedEvent.OutputTuple,\n      EIP712DomainChangedEvent.OutputObject\n    >;\n  };\n}\n"
  },
  {
    "path": "deployments/zksync/types/factories/contracts/EAS__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { EAS, EASInterface } from \"../../contracts/EAS\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"registry\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyRevokedOffchain\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyTimestamped\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientValue\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidExpirationTime\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistry\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRevocations\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSchema\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVerifier\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"Irrevocable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"WrongSchema\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Attested\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldNonce\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"NonceIncreased\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Revoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"RevokedOffchain\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint64\",\n        name: \"timestamp\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Timestamped\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct AttestationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attest\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttestation\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"time\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"expirationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"revocationTime\",\n            type: \"uint64\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"refUID\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"bytes\",\n            name: \"data\",\n            type: \"bytes\",\n          },\n        ],\n        internalType: \"struct Attestation\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getNonce\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"revoker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getSchemaRegistry\",\n    outputs: [\n      {\n        internalType: \"contract ISchemaRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"increaseNonce\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationValid\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiAttestationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttest\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n        ],\n        internalType: \"struct MultiRevocationRequest[]\",\n        name: \"multiRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiRevokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"data\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"multiTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct RevocationRequest\",\n        name: \"request\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revoke\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"revokeOffchain\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"data\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"timestamp\",\n    outputs: [\n      {\n        internalType: \"uint64\",\n        name: \"\",\n        type: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x00040000000000020029000000000002000000000801034f0000000001080019000000600310027000000e24013001970003000000180355000200000008035500000e240030019d0000000102200190000000220000c13d0000012004000039000000400040043f000000040210008c0000004a0000413d000000000208043b000000e00220027000000e360320009c0000004c0000a13d00000e370320009c000001420000a13d00000e380320009c0000032e0000a13d00000e390320009c000003400000213d00000e3c0320009c000006830000613d00000e3d0120009c0000004a0000c13d0000000001000416000000000101004b0000004a0000c13d388b32ad0000040f000003730000013d0000000002000416000000000202004b0000004a0000c13d0000001f0210003900000e2502200197000001e002200039000000400020043f0000001f0210018f0000000503100272000000350000613d00000000040000190000000505400210000000000658034f000000000606043b000001e00550003900000000006504350000000104400039000000000534004b0000002d0000413d000000000402004b000000440000613d0000000503300210000000000438034f0000000302200210000001e003300039000000000503043300000000052501cf000000000525022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000230435000000200110008c0000004a0000413d000001e00100043d002000000001001d00000e260110009c000000810000a13d00000000010000190000388d0001043000000e480320009c000000950000213d00000e500320009c000001600000213d00000e540320009c0000044a0000613d00000e550320009c000003ca0000613d00000e560220009c0000004a0000c13d0000000002000416000000240310008c0000004a0000413d000000000202004b0000004a0000c13d0000000402800370000000000202043b00000e2b0320009c0000004a0000213d0000002303200039000000000313004b0000004a0000813d0000000403200039000000000338034f000000000303043b001c00000003001d00000e2b0330009c0000004a0000213d001b00240020003d0000001c0200002900000005022002100000001b02200029000000000112004b0000004a0000213d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b001a0e2b0010019b0000001c0100006b00000bf60000c13d000000400100043d0000001a02000029000006e70000013d000000400600043d00000e270160009c0000008f0000813d0000004001600039000000400010043f0000000301000039000000000316043600000e2802000041001e00000003001d0000000000230435000000400200043d001f00000002001d00000e290220009c0000037b0000a13d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e490320009c000002d70000213d00000e4d0320009c000004670000613d00000e4e0320009c000003d10000613d00000e4f0220009c0000004a0000c13d000000240210008c0000004a0000413d0000000402800370000000000202043b001e00000002001d00000e2b0220009c0000004a0000213d0000001e020000290000002302200039000000000212004b0000004a0000813d0000001e020000290000000402200039000000000228034f000000000202043b001d00000002001d00000e2b0220009c0000004a0000213d0000001e02000029000000240d2000390000001d0200002900000005022002100000000002d20019000000000112004b0000004a0000213d0000001d0100006b000004650000613d0000001d01000029001c000100100092000000000400041600000e570f000041002000000000001d001b0000000d001d000000200100002900000005011002100000000002d1001900000000010000310000001e0310006a000000630330008a000000020e00036700000000022e034f000000000202043b000000000532004b000000000500001900000000050f801900000e570330019700000e5706200197000000000736004b000000000700001900000000070f4019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000000006d20019000000200260003900000000022e034f00000000036100490000001f0330008a000000000202043b000000000532004b000000000500001900000000050f801900000e570330019700000e5707200197000000000837004b000000000800001900000000080f4019000000000337013f00000e570330009c000000000805c019000000000308004b0000004a0000c13d000000000262001900000000032e034f000000000803043b00000e2b0380009c0000004a0000213d000000060980021000000000039100490000002007200039000000000237004b000000000200001900000000020f201900000e570330019700000e5705700197000000000a35004b000000000a000019000000000a0f4019000000000335013f00000e570330009c000000000a02c01900000000020a004b0000004a0000c13d00000020030000290000001c0230006c00000000050000190000000105006039000000000300041100000005028002100000003f0220003900000e610a200197000000400200043d000000000aa20019000000000b2a004b000000000b000019000000010b00403900000e2b0ca0009c0000008f0000213d000000010bb001900000008f0000c13d0000004000a0043f00000000008204350000000008790019000000000918004b0000004a0000213d000000000978004b000001320000a13d0000000009020019000000000a710049000000400ba0008c000000000b000019000000000b0f401900000e570aa00197000000000c0a004b000000000c000019000000000c0f201900000e570aa0009c000000000c0bc019000000000a0c004b0000004a0000c13d000000400a00043d00000e290ba0009c0000008f0000213d0000002009900039000000400ba000390000004000b0043f000000000b7e034f000000000b0b043b000000000bba0436000000200c700039000000000cce034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000a87004b000001150000413d00000000016e034f000000000101043b001f00000004001d388b2ae90000040f0000001f04000029000000000214004b000011690000413d000000000414004900000020020000290000000102200039002000000002001d0000001d0120006c0000001b0d00002900000e570f000041000000be0000413d000004650000013d00000e410320009c000003210000213d00000e450320009c000006110000613d00000e460320009c000005cd0000613d00000e470220009c0000004a0000c13d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d388b139c0000040f00000004010000390000000202100367000000000202043b0000000000200435000000200010043f00000040020000390000000001000019388b384c0000040f388b13bc0000040f0000002002000039000000400300043d002000000003001d0000000002230436388b124a0000040f0000002004000029000008170000013d00000e510320009c000005a10000613d00000e520320009c000003e70000613d00000e530220009c0000004a0000c13d000000240210008c0000004a0000413d0000000402800370000000000202043b002000000002001d00000e2b0220009c0000004a0000213d000000200210006a00000e5703000041000000e40420008c0000000004000019000000000403401900000e5702200197000000000502004b000000000300a01900000e570220009c000000000304c019000000000203004b0000004a0000c13d00000020020000290000000404200039000001c002000039000000400020043f0000002003400039000000000338034f001f00000004001d000000000448034f000000000404043b001e00000004001d000001200040043f000000000303043b00000e2b0430009c0000004a0000213d0000001f05300029000000000351004900000e5704000041000000c00630008c0000000006000019000000000604401900000e5703300197000000000703004b000000000400a01900000e570330009c000000000406c019000000000304004b0000004a0000c13d0000028003000039000000400030043f000000000458034f000000000404043b00000e260640009c0000004a0000213d000001c00040043f0000002004500039000000000648034f000000000606043b00000e2b0760009c0000004a0000213d000001e00060043f0000002004400039000000000648034f000000000606043b000000000706004b0000000007000019000000010700c039000000000776004b0000004a0000c13d000002000060043f0000002006400039000000000668034f000000000606043b000002200060043f0000004004400039000000000648034f000000000606043b00000e2b0760009c0000004a0000213d00000000065600190000001f05600039000000000515004b0000004a0000813d000000000c08034f000000000568034f000000000505043b00000e2b0750009c0000008f0000213d0000001f07500039001d0020000000920000001d0770017f0000003f077000390000001d0770017f00000e760870009c0000008f0000213d0000028007700039000000400070043f000002800050043f00000020066000390000000007650019000000000717004b00000000070c034f0000004a0000213d000000000667034f0000001f0750018f0000000508500272000001d80000613d0000000009000019000000050a900210000000000ba6034f000000000b0b043b000002a00aa000390000000000ba04350000000109900039000000000a89004b000001d00000413d000000000907004b000001e70000613d0000000508800210000000000686034f0000000307700210000002a008800039000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f000000000068043500000020060000290000004406600039000000000161004900000e5707000041000000600810008c0000000008000019000000000807401900000e5701100197000000000901004b000000000700a01900000e570110009c000000000708c019000002a0015000390000000000010435000002400030043f000000200140003900000000030c034f000000000113034f000000000101043b000002600010043f000001400020043f000000000107004b0000004a0000c13d000000400100043d00000e640210009c0000008f0000213d0000006002100039000000400020043f00000000026c034f000000000202043b000000ff0320008c0000004a0000213d0000000002210436000000200360003900000000033c034f000000000303043b0000000000320435000000400260003900000000022c034f000000000202043b00000040031000390000000000230435000001600010043f000000600160003900000000021c034f000000000202043b00000e260320009c0000004a0000213d000001800020043f001c00200010003d0000001c01c00360000000000101043b00000e2b0210009c0000004a0000213d000001a00010043f0000012001000039388b335e0000040f000000400200043d00000e290120009c0000008f0000213d0000004001200039000000400010043f00000001010000390000000001120436000000400300043d00000e310430009c0000008f0000213d000000c004300039000000400040043f000000800430003900000060050000390000000000540435000000a0043000390000000000040435000000600430003900000000000404350000004004300039000000000004043500000020043000390000000000040435000000000003043500000000003104350000000005000031000000200350006a000000c30730008a0000001c03000029000000a00430008a0000000203000367000000000443034f000000000604043b00000e5704000041000000000876004b0000000008000019000000000804801900000e570770019700000e5709600197000000000a79004b000000000a000019000000000a044019000000000779013f00000e570770009c000000000a08c01900000000070a004b0000004a0000c13d0000001f076000290000000006750049000000c00860008c0000000008000019000000000804401900000e5706600197000000000906004b000000000400a01900000e570660009c000000000408c019000000000404004b0000004a0000c13d000000400400043d00000e310640009c0000008f0000213d000000c006400039000000400060043f000000000673034f000000000606043b00000e260860009c0000004a0000213d00000000086404360000002006700039000000000963034f000000000909043b00000e2b0a90009c0000004a0000213d00000000009804350000002006600039000000000863034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004a0000c13d000000400940003900000000008904350000002008600039000000000883034f000000000808043b000000600940003900000000008904350000004006600039000000000863034f000000000808043b00000e2b0980009c0000004a0000213d000000000a7800190000001f07a0003900000e5708000041000000000957004b0000000009000019000000000908801900000e570770019700000e570b500197000000000cb7004b00000000080080190000000007b7013f00000e570770009c000000000809c019000000000708004b0000004a0000c13d0000000007a3034f000000000707043b00000e2b0870009c0000008f0000213d0000001f087000390000001d0880017f0000003f088000390000001d0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b00403900000e2b0c90009c0000008f0000213d000000010bb001900000008f0000c13d000000400090043f0000000009780436000000200aa00039000000000ba7001900000000055b004b0000004a0000213d000000000aa3034f0000001f0570018f000000050b700272000002b20000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000002aa0000413d000000000c05004b000002c10000613d000000050bb00210000000000aba034f000000000bb900190000000305500210000000000c0b0433000000000c5c01cf000000000c5c022f000000000a0a043b0000010005500089000000000a5a022f00000000055a01cf0000000005c5019f00000000005b043500000000057900190000000000050435000000800540003900000000008504350000002005600039000000000553034f000000000505043b000000a00640003900000000005604350000000005020433000000000505004b000002d10000613d00000000004104350000000001020433000000000101004b000012050000c13d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e4a0320009c000005b80000613d00000e4b0320009c000003fa0000613d00000e4c0220009c0000004a0000c13d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b002000000001001d0000000001000411001f00000001001d00000000001004350000000301000039001e00000001001d000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b000000000201041a000000200120006b000007b90000a13d001d00000002001d0000001f0100002900000000001004350000001e01000029000000200010043f00000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b0000002003000029000000000031041b000000400100043d000000200210003900000000003204350000001d020000290000000000210435000000000200041400000e240320009c00000e2404000041000000000204801900000e240310009c00000000010480190000004001100210000000c002200210000000000112019f00000e5c011001c70000800d02000039000000010300003900000e7404000041388b38810000040f00000001012001900000004a0000613d000004650000013d00000e420320009c000006460000613d00000e430320009c000005f80000613d00000e440120009c0000004a0000c13d0000000001000416000000000101004b0000004a0000c13d00000e6001000041000001200010043f00000e5a010000410000388c0001042e00000e3e0320009c000006d10000613d00000e3f0320009c000006bf0000613d00000e400220009c0000004a0000c13d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b388b143d0000040f000000000101004b0000000001000019000000010100c039000003730000013d00000e3a0320009c000006ae0000613d00000e3b0220009c0000004a0000c13d000000240210008c0000004a0000413d0000000402800370000000000202043b002000000002001d00000e2b0220009c0000004a0000213d000000200110006a00000e5702000041000000440310008c0000000003000019000000000302401900000e5701100197000000000401004b000000000200a01900000e570110009c000000000203c019000000000102004b0000004a0000c13d388b129f0000040f001f00000001001d001d00000000003500000020020000290000000401200039001e00000001001d0000002402200039388b12bf0000040f0000001d02000029388b12de0000040f002000000001001d0000001f01000029388b12d40000040f000000200200002900000000002104350000001f01000029388b12d40000040f0000001e010000290000000201100367000000000101043b000000000300041100000000040004160000001f02000029388b14520000040f00000020011000390000000001010433388b12d40000040f0000000001010433000000400200043d000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e58011001c70000388c0001042e0000001f070000290000004002700039000000400020043f0000000502000039000000000327043600000e2a0200004100000000002304350000000102000039001d00000002001d000000800020043f000000a00010043f000000c00000043f0000000004060433000000200140008c001c00000003001d000006ee0000413d001b00000004001d00000e2b0140009c0000008f0000213d000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b0000070b0000c13d001a00000006001d000000200130008c000003b60000413d001900000003001d000000000000043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000201043b0000001b010000290000001f011000390000000501100270000000000112001900000019030000290000001f0330003900000005033002700000000002320019000000000321004b000003b60000813d000000000001041b0000000101100039000000000321004b000003b20000413d000000000000043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000200200008a0000001b080000290000000003280170000000000101043b0000082b0000c13d00000020020000390000001a060000290000001f07000029000008370000013d0000000001000416000000000101004b0000004a0000c13d00000e6501000041000001200010043f00000e5a010000410000388c0001042e000000640110008c0000004a0000413d388b13650000040f002000000001001d0000000001000031388b137c0000040f001f00000001001d0000002001000029388b12d40000040f0000001f0200002900000000002104350000002001000029388b12d40000040f00000004010000390000000201100367000000000101043b000000000300041100000000040004160000002002000029388b24460000040f00000000010000190000388c0001042e0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b00000e260210009c0000004a0000213d00000000001004350000000301000039000000200010043f00000040020000390000000001000019388b384c0000040f000000000101041a000001200010043f00000e5a010000410000388c0001042e0000000001000416000000000101004b0000004a0000c13d0000000001000412002000000001001d002800000001001d002700000000001d0000800501000039001f00000001001d0000004403000039001e00000003001d0000000004000415000000280440008a000000050440021000000e5902000041388b38620000040f388b325a0000040f002600200000002d002500200000003d001d00000001001d0000000004000415000000260440008a00000005044002100000001f0100002900000e59020000410000001e03000029388b38620000040f388b325a0000040f002400200000002d002300400000003d001c00000001001d0000000004000415000000240440008a00000005044002100000001f0100002900000e59020000410000001e03000029388b38620000040f388b325a0000040f0000001d0200002900000020042000390000000003020433001f00000003001d001d00000001001d000000400100043d002000000001001d00000020021000390000000001040019388b120e0000040f00000e75030000410000001f020000290000002004200029001b00000004001d000000200140003900000000003104350000001c0200002900000020012000390000000003020433001e00000003001d0000002102400039388b120e0000040f0000001b020000290000001e01200029000000210210003900000e7503000041000000000032043500000022021000390000001d0300002900000020013000390000000003030433001d00000003001d388b120e0000040f0000001e020000290000001f012000290000001d0310002900000002023000390000002001000029000000000021043500000022023000390000080f0000013d000000240210008c0000004a0000413d0000000402800370000000000202043b000d00000002001d00000e2b0220009c0000004a0000213d0000000d020000290000002302200039000000000212004b0000004a0000813d0000000d020000290000000402200039000000000228034f000000000202043b000c00000002001d00000e2b0220009c0000004a0000213d0000000d02000029000e00240020003d0000000c0200002900000005022002100000000e02200029000000000112004b0000004a0000213d0000000c0100006b000008480000c13d00000000010000190000388c0001042e000000240210008c0000004a0000413d0000000402800370000000000202043b001600000002001d00000e2b0220009c0000004a0000213d00000016020000290000002302200039000000000212004b0000004a0000813d00000016020000290000000402200039000000000228034f000000000202043b001500000002001d00000e2b0220009c0000004a0000213d0000001602000029001b00240020003d000000150200002900000005052002100000001b03500029000000000113004b0000004a0000213d0000003f0150003900000e610110019700000e620310009c0000008f0000213d0000012001100039000000400010043f0000001501000029000001200010043f000000000101004b0000000002000019000005f10000613d00000060010000390000000003000019000001400430003900000000001404350000002003300039000000000453004b0000048d0000413d0000000001000416001f00000001001d0000001501000029001400010010009200000000050000190000000002000019001900000002001d0000000001000031000000160210006a000000630320008a001c00000005001d0000000504500210001a00000004001d0000001b024000290000000204000367000000000224034f000000000202043b000000000532004b00000e57080000410000000005000019000000000508801900000e570330019700000e5706200197000000000736004b00000000070000190000000007084019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000001b032000290000002002300039000000000224034f001d00000003001d00000000033100490000001f0330008a000000000202043b000000000532004b0000000005000019000000000508801900000e570330019700000e5706200197000000000736004b00000000070000190000000007084019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000001d02200029000000000324034f000000000803043b00000e2b0380009c0000004a0000213d000000050680021000000000036100490000002005200039000000000235004b00000e57070000410000000002000019000000000207201900000e5703300197002000000005001d00000e5705500197000000000935004b00000000090000190000000009074019000000000335013f00000e570330009c000000000902c019000000000209004b0000004a0000c13d000000000208004b000011df0000613d0000001c03000029000000140230006c00000000020000190000000102006039001800000002001d0000000002000411001700000002001d0000003f0260003900000e6103200197000000400200043d0000000003320019001e00000002001d000000000523004b0000000005000019000000010500403900000e2b0930009c0000008f0000213d00000001055001900000008f0000c13d000000400030043f0000001e0200002900000000008204350000002002600029000000000312004b0000004a0000213d000000200320006c000005830000a13d0000001e09000029000000200a0000290000050a0000013d00000020099000390000000003df001900000000000304350000008003b000390000000000e304350000002003c00039000000000334034f000000000303043b000000a005b0003900000000003504350000000000b90435000000200aa0003900000000032a004b000005830000813d0000000003a4034f000000000303043b00000e2b0530009c0000004a0000213d000000200d3000290000000003d10049000000c00530008c00000e57070000410000000005000019000000000507401900000e5703300197000000000603004b0000000006000019000000000607201900000e570330009c000000000605c019000000000306004b0000004a0000c13d000000400b00043d00000e3103b0009c0000008f0000213d000000c003b00039000000400030043f0000000003d4034f000000000303043b00000e260530009c0000004a0000213d00000000053b04360000002003d00039000000000634034f000000000606043b00000e2b0c60009c0000004a0000213d00000000006504350000002005300039000000000354034f000000000303043b000000000603004b0000000006000019000000010600c039000000000663004b0000004a0000c13d0000004006b0003900000000003604350000002003500039000000000334034f000000000303043b0000006006b000390000000000360435000000400c5000390000000003c4034f000000000303043b00000e2b0530009c0000004a0000213d0000000006d300190000001f03600039000000000513004b0000000005000019000000000507801900000e570330019700000e570d100197000000000ed3004b000000000e000019000000000e0740190000000003d3013f00000e570330009c000000000e05c01900000000030e004b0000004a0000c13d000000000364034f000000000d03043b00000e2b03d0009c0000008f0000213d0000001f03d00039000000200500008a000000000353016f0000003f03300039000000000353016f000000400e00043d00000000033e00190000000005e3004b0000000005000019000000010500403900000e2b0f30009c0000008f0000213d00000001055001900000008f0000c13d000000400030043f000000000fde0436000000200360003900000000053d0019000000000515004b0000004a0000213d000000000634034f0000000505d00272000005730000613d0000000003000019000000050730021000000000087f0019000000000776034f000000000707043b00000000007804350000000103300039000000000753004b0000056b0000413d0000001f03d00190000004fc0000613d0000000505500210000000000656034f00000000055f00190000000303300210000000000705043300000000073701cf000000000737022f000000000606043b0000010003300089000000000636022f00000000033601cf000000000373019f0000000000350435000004fc0000013d0000001d01400360000000000101043b0000001e0200002900000017030000290000001f04000029001f00000004001d0000001805000029388b1c390000040f00000000120104340000001f0320006b000011690000413d000001200300043d0000001c05000029000000000353004b000002d10000a13d00000000030104330000001a0400002900000140044000390000000000340435000001200300043d000000000353004b000002d10000a13d001f001f002000710000000001010433000000000101043300000019021000290000000105500039000000150150006c000004980000413d000005f10000013d0000000001000416000000000101004b0000004a0000c13d0000000203000039000000000203041a000000010420019000000001052002700000007f0150018f000000000105c0190000001f0510008c00000000050000190000000105002039000000000552013f00000001055001900000070b0000c13d000001200010043f000000000404004b000007b20000613d0000000000300435000000000201004b000008010000c13d00000140010000390000080c0000013d0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000800b0100003900000004030000390000000004000415000000290440008a000000050440021000000e5b020000410020000000080353388b38620000040f000000200200035f0000000402200370000000000302043b00000e2b02100197002000000002001d0000000001030019388b31940000040f000006e50000013d000000240210008c0000004a0000413d0000000402800370000000000202043b000300000002001d00000e2b0220009c0000004a0000213d00000003020000290000002302200039000000000212004b0000004a0000813d00000003020000290000000402200039000000000228034f000000000202043b000200000002001d00000e2b0220009c0000004a0000213d0000000302000029000700240020003d000000020200002900000005052002100000000703500029000000000113004b0000004a0000213d0000003f0150003900000e610110019700000e620310009c0000008f0000213d0000012001100039000000400010043f0000000201000029000001200010043f000000000101004b000000000200001900000c350000c13d0000012001000039388b32080000040f0000000002010019000000400100043d002000000001001d388b122e0000040f0000015e0000013d0000000002000416000000440110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b00000e260210009c0000004a0000213d00000000001004350000000601000039000000200010043f0000004002000039001f00000002001d00000000010000190020000000080353388b384c0000040f000000200200035f0000002402200370000000000202043b0000000000200435000000200010043f00000000010000190000001f02000029000006cb0000013d0000000001000416000000000101004b0000004a0000c13d002000000004001d00000e590100004100000000001004390000000001000412001f00000001001d00000004001004430000010001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000400700043d000000000101043b000000ff0210008c000007c20000c13d000000000300041a000000010430019000000001023002700000007f0120018f000000000102c0190000001f0210008c00000000020000190000000102002039000000000223013f00000001022001900000070b0000c13d0000000002170436000000000404004b00000b990000613d0000000000000435000000000301004b000000000300001900000b9f0000613d00000e6f0400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000513004b0000063e0000413d00000b9f0000013d000001040110008c0000004a0000413d0000000401800370000000000101043b002000000001001d000001200010043f0000002401800370000000000101043b000001c00010043f0000004401800370000000000101043b000001e00010043f000001c001000039000001400010043f0000026001000039000000400010043f0000006401800370000000000101043b000000ff0210008c0000004a0000213d000002000010043f0000008401800370000000000101043b000002200010043f000000a401800370000000000101043b000002400010043f0000020001000039000001600010043f000000c401800370000000000101043b001f00000001001d00000e260110009c0000004a0000213d0000001f01000029000001800010043f000000e401800370000000000101043b00000e2b0210009c0000004a0000213d000001a00010043f0000012001000039388b35f00000040f388b13650000040f001e00000001001d0000000001000031388b137c0000040f001d00000001001d0000001e01000029388b12d40000040f0000001d0200002900000000002104350000001e01000029388b12d40000040f000000000400041600000020010000290000001e020000290000001f03000029388b24460000040f00000000010000190000388c0001042e0000000002000416000000240310008c0000004a0000413d000000000202004b0000004a0000c13d0000000402800370000000000202043b00000e2b0320009c0000004a0000213d0000002303200039000000000313004b0000004a0000813d0000000403200039000000000338034f000000000303043b001e00000003001d00000e2b0330009c0000004a0000213d001d00240020003d0000001e0200002900000005022002100000001d02200029000000000112004b0000004a0000213d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b001c0e2b0010019b0000001e0100006b000010e00000c13d000000400100043d0000001c02000029000006e70000013d0000000001000416000000000101004b0000004a0000c13d0000000001000412002200000001001d002101400000003d000080050100003900000044030000390000000004000415000000220440008a000000050440021000000e5902000041388b38620000040f00000e2601100197000001200010043f00000e5a010000410000388c0001042e0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000000401800370000000000101043b00000000001004350000000501000039000000200010043f00000040020000390000000001000019388b384c0000040f000000000101041a00000e2b01100197000001200010043f00000e5a010000410000388c0001042e0000000002000416000000240110008c0000004a0000413d000000000102004b0000004a0000c13d0000800b0100003900000004030000390000000004000415000000290440008a000000050440021000000e5b020000410020000000080353388b38620000040f000000200200035f0000000402200370000000000202043b00000e2b03100197002000000003001d0000000001000411388b31c60000040f000000400100043d0000002002000029000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e58011001c70000388c0001042e00000003014002100000010001100089000000010200008a00000000011201cf000000000204004b00000000010060190000001e020000290000000002020433000000000112016f000000000141019f000001800010043f0000000004070433000000200140008c000007110000413d001b00000004001d00000e2b0140009c0000008f0000213d0000001d01000029000000000101041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000007cd0000613d00000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d0001043000000003014002100000010001100089000000010200008a00000000011201cf000000000204004b00000000010060190000000002030433000000000112016f000000000141019f000001a00010043f00000e24040000410000001e0200002900000e240120009c000000000104001900000000010240190000004001100210001a00000006001d000000000206043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b001d00000001001d000001400010043f0000001c0200002900000e240120009c00000e2404000041000000000204801900000040012002100000001f02000029000000000202043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b001f00000001001d000001600010043f00000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000201043b000001000020043f000000400100043d0000008003100039000000000023043500000060021000390000001f03000029000000000032043500000040021000390000001d030000290000000000320435000000a002000039001d00000002001d0000000002210436000000a0031000390000000004000410001f00000004001d000000000043043500000e3003000041000000000032043500000e310310009c0000008f0000213d000000c003100039000000400030043f00000e240300004100000e240420009c00000000020380190000004002200210000000000101043300000e240410009c00000000010380190000006001100210000000000121019f000000000200041400000e240420009c0000000002038019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b000000e00010043f0000001f02000029000001200020043f0000001a02000029000000000302043300000e2b0230009c0000008f0000213d0000000202000039000000000502041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f00000001055001900000070b0000c13d000000200540008c000007a90000413d0000001f05300039000000050550027000000e320650004100000e3205000041000000200730008c000000000506801900000000002004350000001f04400039000000050440027000000e3204400041000000000645004b000007a90000813d000000000005041b0000000105500039000000000645004b000007a50000413d0000001f0430008c0000116f0000a13d0000000000200435000000200400008a00000000064301700000117f0000c13d000000200500003900000e32040000410000118b0000013d000001000300008a000000000232016f000001400020043f000000000101004b000001600100003900000140010060390000080c0000013d000000400100043d00000e7302000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d00010430000000ff0210018f000000200320008c000008210000413d00000e6e01000041000000000017043500000e240100004100000e240270009c0000000007018019000000400170021000000e35011001c70000388d00010430001a00000006001d000000200130008c000007ec0000413d001900000003001d0000001d01000029000000000010043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000201043b0000001b010000290000001f011000390000000501100270000000000112001900000019030000290000001f0330003900000005033002700000000002320019000000000321004b000007ec0000813d000000000001041b0000000101100039000000000321004b000007e80000413d0000001d01000029000000000010043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000200200008a0000001b080000290000000003280170000000000101043b00000bd90000c13d00000020020000390000001a060000290000001f0700002900000be50000013d00000e320200004100000000040000190000000003040019000000000402041a0000014005300039000000000045043500000001022000390000002004300039000000000514004b000008030000413d0000016001300039000001200210008a0000012001000039002000000001001d388b128c0000040f0000002001000039000000400200043d001f00000002001d00000000021204360000002001000029388b121b0000040f0000001f04000029000000000141004900000e240200004100000e240310009c000000000102801900000e240340009c000000000402801900000040024002100000006001100210000000000121019f0000388c0001042e001e00000007001d00000e290370009c0000008f0000213d0000001e040000290000004003400039000000400030043f00000020034000390000000000130435000000000024043500000bac0000013d000000200200003900000000040000190000001a060000290000001f0700002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b0000082f0000413d000000000383004b000008420000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f00000000026200190000000002020433000000000232016f000000000021041b000000010180021000000001011001bf000000000010041b000000ff010000390000001c03000029000006f80000013d0000000001000416001000000001001d0000000c01000029000b00010010009200000e240e000041000f00000000001d0000000f0100002900000005011002100000000e0310002900000000020000310000000d0120006a000000c30410008a0000000201000367000000000331034f000000000303043b000000000543004b00000e57080000410000000005000019000000000508801900000e570440019700000e5706300197000000000746004b00000000070000190000000007084019000000000446013f00000e570440009c000000000705c019000000000407004b0000004a0000c13d0000000e033000290000000004320049000000a00540008c00000e57070000410000000005000019000000000507401900000e5704400197000000000604004b0000000006000019000000000607201900000e570440009c000000000605c019000000000406004b0000004a0000c13d000000400400043d001600000004001d00000e630440009c0000008f0000213d0000001605000029000000a004500039000000400040043f000000000431034f000000000404043b00000000044504360000002005300039000000000651034f000000000606043b00000e2b0760009c0000004a0000213d00000000073600190000001f06700039000000000826004b00000e570b000041000000000800001900000000080b801900000e570660019700000e5709200197000000000a96004b000000000a000019000000000a0b4019000000000696013f00000e570660009c000000000a08c01900000000060a004b0000004a0000c13d000000000671034f000000000806043b00000e2b0680009c0000008f0000213d00000005068002100000003f0660003900000e6109600197000000400600043d0000000009960019000000000a69004b000000000a000019000000010a00403900000e2b0b90009c0000008f0000213d000000010aa001900000008f0000c13d0000002007700039000000400090043f000000000086043500000006088002100000000008780019000000000928004b0000004a0000213d000000000978004b000008ca0000a13d0000000009060019000000000a720049000000400ba0008c00000e570d000041000000000b000019000000000b0d401900000e570aa00197000000000c0a004b000000000c000019000000000c0d201900000e570aa0009c000000000c0bc019000000000a0c004b0000004a0000c13d000000400a00043d00000e290ba0009c0000008f0000213d0000002009900039000000400ba000390000004000b0043f000000000b71034f000000000b0b043b000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000a87004b000008ac0000413d00000000006404350000002005500039000000000551034f000000000505043b00000e2b0650009c0000004a0000213d00000000063500190000001f05600039000000000725004b00000e570a000041000000000700001900000000070a801900000e570550019700000e5708200197000000000985004b000000000900001900000000090a4019000000000585013f00000e570550009c000000000907c019000000000509004b0000004a0000c13d000000000561034f000000000705043b00000e2b0570009c0000008f0000213d00000005057002100000003f0550003900000e6108500197000000400500043d0000000008850019000000000958004b0000000009000019000000010900403900000e2b0a80009c0000008f0000213d00000001099001900000008f0000c13d000000400080043f0000000000750435000000200660003900000060877000c90000000007670019000000000827004b0000004a0000213d000000000876004b0000091f0000813d00000000080500190000000009620049000000600a90008c00000e570c000041000000000a000019000000000a0c401900000e5709900197000000000b09004b000000000b000019000000000b0c201900000e570990009c000000000b0ac01900000000090b004b0000004a0000c13d000000400900043d00000e640a90009c0000008f0000213d000000600a9000390000004000a0043f000000000a61034f000000000a0a043b000000ff0ba0008c0000004a0000213d0000002008800039000000000aa90436000000200b600039000000000bb1034f000000000b0b043b0000000000ba0435000000400a600039000000000aa1034f000000000a0a043b000000400b9000390000000000ab043500000000009804350000006006600039000000000976004b000008fa0000413d00000016020000290000004002200039001400000002001d00000000005204350000006002300039000000000321034f000000000303043b00000e260630009c0000004a0000213d00000016060000290000006006600039001500000006001d00000000003604350000002002200039000000000121034f000000000101043b00000e2b0210009c0000004a0000213d00000016020000290000008002200039001300000002001d000000000012043500000000060404330000000002060433000000000102004b000011df0000613d0000000001050433000000000112004b000011df0000c13d0000000004000019001200000006001d001100000002001d0000000001060433000000000141004b000002d10000a13d000000140100002900000000030104330000000001030433000000000141004b000002d10000a13d00000016010000290000000001010433001900000004001d00000005024002100000002004200039000000000264001900000000020204330000001305000029000000000505043300000e2b07500197000000400600043d00000e630560009c0000008f0000213d0000000003430019000000000303043300000015040000290000000004040433000000a005600039000000400050043f00000e26044001970000006005600039001e00000005001d0000000000450435000000400460003900000000003404350000002003600039000000000023043500000000001604350000008001600039002000000001001d0000000000710435000000000107004b0000097f0000613d001b00000003001d001c00000004001d001d00000007001d001f00000006001d00000e5b010000410000000000100439000000000100041400000e240210009c00000000010e8019000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e2b011001970000001d0110006b00000e240e0000410000001f060000290000001c040000290000001b030000290000117c0000413d0000000001060433001f00000001001d0000000001040433001a00000001001d00000000010304330000000012010434001c00000002001d0000000001010433001b00000001001d0000001e01000029000000000101043300000e2601100197001d00000001001d00000000001004350000000301000039000000200010043f000000000100041400000e240210009c00000000010e8019000000c00110021000000e5c011001c70000801002000039388b38860000040f00000e240500004100000001022001900000004a0000613d000000000101043b000000000201041a000000010300008a000000000332004b000011690000613d0000000103200039000000000031041b0000002001000029000000000101043300000e2b03100197000000400100043d000000e0041000390000000000340435000000c0031000390000000000230435000000a0021000390000001b03000029000000000032043500000080021000390000001c03000029000000000032043500000060021000390000001f03000029000000000032043500000040021000390000001d030000290000000000320435000000e002000039001c00000002001d000000000221043600000e6003000041000000000032043500000e7c0310009c0000008f0000213d0000010003100039000000400030043f00000e240320009c00000000020580190000004002200210000000000101043300000e240310009c00000000010580190000006001100210000000000121019f000000000200041400000e240320009c0000000002058019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000e240300004100000001022001900000004a0000613d000000000101043b001d00000001001d00000e590100004100000000001004390000000001000412001f00000001001d0000000400100443000000a001000039001b00000001001d0000002400100443000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e26011001970000000002000410001800000002001d000000000112004b00000a190000c13d00000e590100004100000000001004390000001f01000029000000040010044300000080010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b002000000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b000000200110006c00000a190000c13d00000e590100004100000000001004390000001f01000029000000040010044300000060010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d00000e240400004100000a730000013d000000400100043d002000000001001d000000200210003900000e3001000041001700000002001d000000000012043500000e590100004100000000001004390000001f010000290000000400100443000000c0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000020020000290000004002200039000000000012043500000e590100004100000000001004390000001f0100002900000004001004430000001c010000290000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000020020000290000006002200039000000000012043500000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000002004000029000000a00240003900000018030000290000000000320435000000800240003900000000001204350000001b01000029000000000014043500000e310140009c00000e24040000410000008f0000213d0000002002000029000000c001200039000000400010043f000000170300002900000e240130009c00000000030480190000004001300210000000000202043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000e240400004100000001022001900000004a0000613d000000000101043b000000400200043d00000022032000390000001d05000029000000000053043500000e6803000041000000000032043500000002032000390000000000130435000000000100041400000e240310009c000000000104801900000e240320009c00000000020480190000004002200210000000c001100210000000000112019f00000e69011001c70000801002000039388b38860000040f00000e240e00004100000001022001900000004a0000613d000000000601043b0000001e0100002900000000080104330000001a0300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c0000008f0000213d0000008001700039000000400010043f0000000004070433000000410440008c00000af10000c13d000000000303043300000e6b0430009c00000af10000213d001e00000008001d002000000002001d0000000002050433001f00000009001d0000000004090433001d00000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435001c00000007001d000000a003700039000000f80220027000000000002304350000000000000435000000000200041400000e240320009c00000000020e801900000e240310009c00000000010e80190000004001100210000000c002200210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c00000000050300190000002005008039000000050450027200000ad30000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000acc0000413d0000001f0550019000000ae10000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f0003000000010355000000010220019000000e240e00004100000020020000290000001f090000290000001e04000029000011cf0000613d000000000100043300000e26031001980000001d060000290000001c0700002900000af10000613d000000000141013f00000e260110019800000b7d0000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b00000b080000613d000000000500001900000000064500190000000007950019000000000707043300000000007604350000002005500039000000000635004b00000b010000413d000000000443001900000000000404350000001f03300039000000200600008a000000000363016f00000064043000390000000000480435000000a303300039000000000463016f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c0000008f0000213d00000001044001900000008f0000c13d000000400030043f00000000030804330000000005000414000000040420008c00000b510000c13d00000001020000390000000104000031000000000104004b00000b670000613d00000e2b0140009c0000008f0000213d0000001f01400039000000000161016f0000003f01100039000000000161016f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c0000008f0000213d00000001055001900000008f0000c13d000000400010043f00000000014304360000000305000367000000050640027200000b3f0000613d000000000700001900000005087002100000000009810019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000b370000413d0000001f0440019000000b4e0000613d0000000506600210000000000565034f00000000066100190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f0000000000460435000000000202004b00000b6b0000c13d000011100000013d00000e240410009c00000000010e8019000000400110021000000e240430009c00000000030e80190000006003300210000000000113019f00000e240350009c00000000050e8019000000c003500210000000000131019f002000000006001d388b38860000040f000000200600002900000e240e000041000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b00000b220000c13d00000060030000390000008001000039000000000202004b000011100000613d0000000002030433000000200320008c000011100000413d000000200320008c00000e57050000410000000003000019000000000305401900000e5702200197000000000402004b0000000004000019000000000405201900000e570220009c000000000403c019000000000204004b0000004a0000c13d000000000101043300000e6d0110009c000011100000c13d00000019040000290000000104400039000000110140006c00000012060000290000093f0000413d0000000f020000290000000b0120006c00000000050000190000000105006039000000160100002900000000010104330000001502000029000000000202043300000e260320019700000000020600190000001004000029001000000004001d388b2ae90000040f00000e240e000041000000100210006b000011690000413d00100010001000710000000f020000290000000102200039000f00000002001d0000000c0120006c0000084e0000413d000004650000013d000001000400008a000000000343016f0000000000320435000000000101004b000000200300003900000000030060190000003f01300039000000200200008a000000000221016f001e00000007001d0000000001720019000000000221004b0000000002000019000000010200403900000e2b0310009c0000008f0000213d00000001022001900000008f0000c13d000000400010043f00000e590100004100000000001004390000001f0100002900000004001004430000002001000029000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000400700043d000000000101043b000000ff0210008c000010d20000c13d0000000104000039000000000304041a000000010630019000000001013002700000007f0510018f00000000010560190000001f0210008c00000000020000190000000102002039000000000223013f00000001022001900000001e020000290000070b0000c13d001e00000002001d002000000007001d0000000002170436000000000606004b000011160000c13d000001000100008a000000000113016f0000000000120435000000000105004b00000020030000390000000003006019000011230000013d000000200200003900000000040000190000001a060000290000001f0700002900000000057200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00000bdd0000413d000000000383004b00000bf00000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f00000000027200190000000002020433000000000232016f000000000021041b000000010180021000000001011001bf0000001d02000029000000000012041b000000ff010000390000071a0000013d0000000001000411001e0e260010019b001900060000003d001f80100000003d0000000002000019001d00000002001d00000005012002100000001b011000290000000201100367000000000101043b002000000001001d0000001e0100002900000000001004350000001901000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000001f02000029388b38860000040f00000001022001900000004a0000613d000000000101043b00000020020000290000000000200435000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000001f02000029388b38860000040f00000001022001900000004a0000613d0000002006000029000000000101043b000000000201041a00000e2b03200198000011660000c13d00000e5e022001970000001a07000029000000000272019f000000000021041b000000000100041400000e240210009c00000e2401008041000000c00110021000000e2d011001c70000800d02000039000000040300003900000e7a040000410000001e05000029388b38810000040f00000001012001900000004a0000613d0000001d0200002900000001022000390000001c0120006c00000bfb0000413d0000007e0000013d00000060040000390000000001000019000001400310003900000000004304350000002001100039000000000351004b00000c370000413d000b00000004001d0000000001000416000900000001001d0000000201000029000100010010009200000000020000190000000003000019000400000002001d0000000002000031000000030120006a000000c30410008a000a00000003001d0000000503300210000500000003001d00000007033000290000000201000367000000000331034f000000000303043b000000000543004b00000e57080000410000000005000019000000000508801900000e570440019700000e5706300197000000000746004b00000000070000190000000007084019000000000446013f00000e570440009c000000000705c019000000000407004b0000004a0000c13d00000007063000290000002004600039000000000341034f000000000503043b001d00000006001d00000000036200490000001f0330008a00000e570630019700000e5707500197000000000867004b00000e570900004100000000080000190000000008094019000000000667013f000000000735004b0000000007000019000000000709801900000e570660009c000000000807c019000000000608004b0000004a0000c13d000e001d0050002d0000000e05100360000000000505043b001000000005001d00000e2b0550009c0000004a0000213d00000010050000290008000500500218000000080520006a0000000e060000290000002007600039000000000657004b0000000006000019000000000609201900000e5705500197001a00000007001d00000e5707700197000000000857004b00000000080000190000000008094019000000000557013f00000e570550009c000000000806c019000000000508004b0000004a0000c13d000000100500006b000011df0000613d000f00200040003d0000000f04100360000000000404043b000000000534004b00000e57080000410000000005000019000000000508801900000e570330019700000e5706400197000000000736004b00000000070000190000000007084019000000000336013f00000e570330009c000000000705c019000000000307004b0000004a0000c13d0000001d04400029000000000341034f000000000303043b00000e2b0530009c0000004a0000213d000d0060000000920000000d653000b900000000022500190000002004400039000000000524004b00000e57070000410000000005000019000000000507201900000e570220019700000e5704400197000000000624004b00000000060000190000000006074019000000000224013f00000e570220009c000000000605c019000000000206004b0000004a0000c13d000000100230006b000011df0000c13d0000000f020000290000004002200039000000000121034f000000000101043b001100000001001d00000e2b0110009c0000004a0000213d0000001d01000029000600600010003d0000000f01000029000c00200010003d0000000002000019002000000002001d00000005012002100000001a0310002900000000020000310000000e0120006a000000df0410008a0000000201000367000000000331034f000000000503043b000000000345004b00000e57080000410000000003000019000000000308801900000e570440019700000e5706500197000000000746004b00000000070000190000000007084019000000000446013f00000e570440009c000000000703c019000000000307004b0000004a0000c13d0000000f031003600000001d0420006a0000001f0440008a000000000303043b000000000643004b00000e57090000410000000006000019000000000609801900000e570440019700000e5707300197000000000847004b00000000080000190000000008094019000000000447013f00000e570440009c000000000806c019000000000408004b0000004a0000c13d0000001d04300029000000000341034f000000000303043b00000e2b0630009c0000004a0000213d0000000d763000b900000000062600190000002004400039000000000764004b00000e570a000041000000000700001900000000070a201900000e570660019700000e5708400197000000000968004b000000000900001900000000090a4019000000000668013f00000e570660009c000000000907c019000000000609004b0000004a0000c13d000000200330006b000002d10000813d0000000c03100360000000000303043b00000e260630009c0000004a0000213d000000400f00043d00000e6306f0009c0000008f0000213d0000001a07500029000000a005f00039000000400050043f0000001d05100360000000000505043b00000000055f0436001f00000005001d0000000005720049000000c00650008c00000e57090000410000000006000019000000000609401900000e5705500197000000000805004b0000000008000019000000000809201900000e570550009c000000000806c019000000000508004b0000004a0000c13d000000400500043d00000e310650009c0000008f0000213d000000c006500039000000400060043f000000000671034f000000000606043b00000e260860009c0000004a0000213d00000000086504360000002006700039000000000961034f000000000909043b00000e2b0a90009c0000004a0000213d00000000009804350000002006600039000000000861034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004a0000c13d000000400950003900000000008904350000002008600039000000000881034f000000000808043b000000600950003900000000008904350000004006600039000000000861034f000000000808043b00000e2b0980009c0000004a0000213d000000000a7800190000001f07a00039000000000827004b00000e570c000041000000000800001900000000080c801900000e570770019700000e5709200197000000000b97004b000000000b000019000000000b0c4019000000000797013f00000e570770009c000000000b08c01900000000070b004b0000004a0000c13d0000000007a1034f000000000707043b00000e2b0870009c0000008f0000213d0000001f08700039001c0020000000920000001c0880017f0000003f088000390000001c0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b00403900000e2b0c90009c0000008f0000213d000000010bb001900000008f0000c13d000000400090043f0000000009780436000000200aa00039000000000ba70019000000000b2b004b0000004a0000213d000000000aa1034f000000050b70027200000d760000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b00000d6e0000413d0000001f0c70019000000d850000613d000000050bb00210000000000aba034f000000000bb90019000000030cc00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000a0a043b000001000cc00089000000000aca022f000000000aca01cf000000000ada019f0000000000ab043500000000077900190000000000070435000000800750003900000000008704350000002006600039000000000661034f000000000606043b000000a0075000390000000000670435000000200600002900000060766000c900000000046400190000000002420049000000600620008c00000e57080000410000000006000019000000000608401900000e5702200197000000000702004b0000000007000019000000000708201900000e570220009c000000000706c0190000001f020000290000000000520435000000000207004b0000004a0000c13d000000400200043d00000e640520009c0000008f0000213d0000006005200039000000400050043f000000000541034f000000000505043b000000ff0650008c0000004a0000213d00000000055204360000002006400039000000000661034f000000000606043b00000000006504350000004004400039000000000141034f000000000101043b000000400420003900000000001404350000006001f00039001b00000001001d00000000003104350000004006f0003900000000002604350000008002f000390000001101000029001600000002001d0000000000120435000000000101004b00000dd10000613d001900000006001d001e0000000f001d00000e5b010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e2b01100197000000110110006b0000001e0f00002900000019060000290000117c0000413d0000001f01000029000000000501043300000080015000390000000001010433000000200210003900000e240320009c00000e240400004100000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f00000000020f0433001500000002001d0000000002060433001200000002001d00000060025000390000000002020433001400000002001d00000020025000390000000002020433001f00000002001d00000040025000390000000002020433001e00000002001d0000001b020000290000000002020433001900000002001d001700000005001d0000000002050433001800000002001d000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f000000190300002900000e2604300197000000180300002900190e260030019b0000001e0300006b0000000003000019000000010300c039001800000003001d0000001f03000029001e0e2b0030019b00000001022001900000004a0000613d000000000101043b001300000001001d0000001701000029000000a0011000390000000001010433001700000001001d00000000004004350000000301000039000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039001f00000004001d388b38860000040f0000001f0500002900000001022001900000004a0000613d000000000101043b000000000201041a000000010300008a000000000332004b000011690000613d0000000103200039000000000031041b0000001601000029000000000101043300000e2b03100197000000400100043d0000016004100039000000000034043500000140031000390000000000230435000001200210003900000017030000290000000000320435000001000210003900000013030000290000000000320435000000e00210003900000014030000290000000000320435000000c00210003900000018030000290000000000320435000000a0021000390000001e030000290000000000320435000000800210003900000019030000290000000000320435000000600210003900000015030000290000000000320435000000400210003900000000005204350000016002000039000000000221043600000e6503000041000000000032043500000e660310009c0000008f0000213d0000018003100039000000400030043f00000e240320009c00000e240400004100000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b001900000001001d00000e590100004100000000001004390000000001000412001e00000001001d0000000400100443000000a001000039001800000001001d0000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b00000e26011001970000000002000410001700000002001d000000000112004b00000ea30000c13d00000e590100004100000000001004390000001e01000029000000040010044300000080010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b001f00000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f0110006c00000ea30000c13d00000e590100004100000000001004390000001e01000029000000040010044300000060010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d00000efc0000013d000000400100043d001f00000001001d000000200210003900000e3001000041001600000002001d000000000012043500000e590100004100000000001004390000001e010000290000000400100443000000c0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f020000290000004002200039000000000012043500000e590100004100000000001004390000001e010000290000000400100443000000e0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f020000290000006002200039000000000012043500000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000010d10000613d000000000101043b0000001f04000029000000a00240003900000017030000290000000000320435000000800240003900000000001204350000001801000029000000000014043500000e310140009c0000008f0000213d0000001f02000029000000c001200039000000400010043f000000160300002900000e240130009c00000e240400004100000000030480190000004001300210000000000202043300000e240320009c00000000020480190000006002200210000000000112019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000101043b000000400200043d00000022032000390000001904000029000000000043043500000e6803000041000000000032043500000002032000390000000000130435000000000100041400000e240310009c00000e2404000041000000000104801900000e240320009c00000000020480190000004002200210000000c001100210000000000112019f00000e69011001c70000801002000039388b38860000040f00000001022001900000004a0000613d000000000601043b0000001b010000290000000008010433000000120300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c0000008f0000213d0000008001700039000000400010043f0000000004070433000000410440008c00000f7a0000c13d000000000303043300000e6b0430009c00000f7a0000213d001b00000008001d001f00000002001d0000000002050433001e00000009001d0000000004090433001900000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435001800000007001d000000a003700039000000f80220027000000000002304350000000000000435000000000200041400000e240320009c00000e2404000041000000000204801900000e240310009c00000000010480190000004001100210000000c002200210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c00000000050300190000002005008039000000050450027200000f5d0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000f560000413d0000001f0550019000000f6b0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f000300000001035500000001022001900000001f020000290000001e090000290000001b04000029000011e20000613d000000000100043300000e26031001980000001906000029000000180700002900000f7a0000613d000000000141013f00000e2601100198000010030000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b00000f910000613d000000000500001900000000064500190000000007950019000000000707043300000000007604350000002005500039000000000635004b00000f8a0000413d000000000443001900000000000404350000001f033000390000001c0330017f00000064043000390000000000480435000000a3033000390000001c0430017f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c0000008f0000213d00000001044001900000008f0000c13d000000400030043f00000000030804330000000006000414000000040420008c00000fd90000c13d00000001020000390000000104000031000000000104004b00000fed0000613d00000e2b0140009c0000008f0000213d0000001f014000390000001c0110017f0000003f011000390000001c0110017f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c0000008f0000213d00000001055001900000008f0000c13d000000400010043f00000000014304360000000305000367000000050640027200000fc70000613d000000000700001900000005087002100000000009810019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000fbf0000413d0000001f0440019000000fd60000613d0000000506600210000000000565034f00000000066100190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f0000000000460435000000000202004b00000ff10000c13d000011100000013d00000e240410009c00000e24050000410000000001058019000000400110021000000e240430009c00000000030580190000006003300210000000000113019f00000e240360009c0000000006058019000000c003600210000000000131019f388b38860000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b00000faa0000c13d00000080010000390000000b03000029000000000202004b000011100000613d0000000002030433000000200320008c000011100000413d000000200320008c00000e57050000410000000003000019000000000305401900000e5702200197000000000402004b0000000004000019000000000405201900000e570220009c000000000403c019000000000204004b0000004a0000c13d000000000101043300000e6d0110009c000011100000c13d00000020020000290000000102200039000000100120006c00000cc20000413d0000000a02000029000000010120006c00000000010000190000000101006039001f00000001001d00000002010003670000000602100360000000000202043b001e00000002001d00000e260220009c0000004a0000213d000000000400003100000008020000290000003f0220003900000e6105200197000000400200043d0000000005520019002000000002001d000000000625004b0000000006000019000000010600403900000e2b0750009c0000008f0000213d00000001066001900000008f0000c13d000000400050043f00000010020000290000002003000029000000000023043500000008030000290000001a02300029000000000642004b0000004a0000213d0000001a0620006c000010b30000a13d00000020070000290000001a080000290000103b0000013d00000020077000390000000003bd0019000000000003043500000080039000390000000000c304350000002003a00039000000000331034f000000000303043b000000a005900039000000000035043500000000009704350000002008800039000000000328004b000010b30000813d000000000681034f000000000606043b00000e2b0960009c0000004a0000213d0000001a0b6000290000000006b40049000000c00960008c00000e57030000410000000009000019000000000903401900000e5706600197000000000a06004b000000000a000019000000000a03201900000e570660009c000000000a09c01900000000060a004b0000004a0000c13d000000400900043d00000e310690009c0000008f0000213d000000c006900039000000400060043f0000000006b1034f000000000606043b00000e260a60009c0000004a0000213d000000000a6904360000002006b00039000000000c61034f000000000c0c043b00000e2b0dc0009c0000004a0000213d0000000000ca0435000000200a6000390000000006a1034f000000000606043b000000000c06004b000000000c000019000000010c00c039000000000cc6004b0000004a0000c13d000000400c90003900000000006c04350000002006a00039000000000661034f000000000606043b000000600c90003900000000006c0435000000400aa000390000000006a1034f000000000606043b00000e2b0c60009c0000004a0000213d000000000eb600190000001f06e00039000000000b46004b000000000b000019000000000b03801900000e570660019700000e570c400197000000000dc6004b000000000d000019000000000d0340190000000006c6013f00000e570660009c000000000d0bc01900000000060d004b0000004a0000c13d0000000006e1034f000000000b06043b00000e2b06b0009c0000008f0000213d0000001f06b000390000001c0660017f0000003f066000390000001c0660017f000000400c00043d00000000066c0019000000000dc6004b000000000d000019000000010d00403900000e2b0f60009c0000008f0000213d000000010dd001900000008f0000c13d000000400060043f000000000dbc04360000002006e00039000000000e6b0019000000000e4e004b0000004a0000213d000000000e61034f000000050fb00272000010a30000613d0000000006000019000000050560021000000000035d001900000000055e034f000000000505043b000000000053043500000001066000390000000003f6004b0000109b0000413d0000001f06b001900000102d0000613d0000000503f0021000000000053e034f00000000033d00190000000306600210000000000e030433000000000e6e01cf000000000e6e022f000000000505043b0000010006600089000000000565022f00000000056501cf0000000005e5019f00000000005304350000102d0000013d0000001d01100360000000000101043b00000020020000290000001e030000290000000904000029000900000004001d0000001f05000029388b1c390000040f0000000012010434000000090320006b000011690000413d000001200300043d0000000a0330006c000002d10000a13d0000000003010433000000050400002900000140044000390000000000340435000001200300043d0000000a0330006c000002d10000a13d00090009002000710000000001010433000000000101043300000004021000290000000a030000290000000103300039000000020130006c00000c430000413d000005f10000013d000000000001042f000000ff0210018f000000200320008c000007c50000813d002000000007001d00000e290370009c0000008f0000213d00000020040000290000004003400039000000400030043f000000200340003900000000001304350000000000240435000000400300043d000011300000013d001b00050000003d001a80100000003d0019800d0000003d001800030000003d0000000002000019001f00000002001d00000005012002100000001d011000290000000201100367000000000101043b002000000001001d00000000001004350000001b01000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000001a02000029388b38860000040f00000001022001900000004a0000613d000000000101043b000000000201041a00000e2b03200198000011130000c13d00000e5e022001970000001c06000029000000000262019f000000000021041b000000000100041400000e240210009c00000e2401008041000000c00110021000000e2d011001c70000001902000029000000180300002900000e5f040000410000002005000029388b38810000040f00000001012001900000004a0000613d0000001f0200002900000001022000390000001e0120006c000010e50000413d000006ab0000013d000000400100043d00000e7d02000041000007bb0000013d000000400100043d00000e5d02000041000007bb0000013d0000000000400435000000020330008c0000000003000019000011230000413d00000e700400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000513004b0000111c0000413d0000003f01300039000000200200008a000000000121016f0000002002100029000000000112004b00000000010000190000000101004039000000000302001900000e2b0220009c0000008f0000213d00000001011001900000008f0000c13d000000400030043f000000000203001900000e710130009c0000008f0000213d001d00000002001d0000002001200039000000400010043f0000000000020435000000400300043d001f00000003001d0000002001300039000000e002000039000000000021043500000e72010000410000000000130435000000e0023000390000001e01000029388b121b0000040f00000000020100190000001f030000290000000001320049000000400330003900000000001304350000002001000029388b121b0000040f002000000001001d0000800b0100003900000004030000390000000004000415000000290440008a000000050440021000000e2e02000041388b38620000040f0000001f04000029000000c00540003900000020020000290000000003420049000000000035043500000080054000390000000003000410000000000035043500000060034000390000000000130435000000a00140003900000000000104350000001d01000029388b123d0000040f0000001f04000029000000000141004900000e240200004100000e240340009c000000000402801900000e240310009c00000000010280190000081d0000013d000000400100043d00000e7902000041000007bb0000013d00000e770100004100000000001004350000001101000039000000040010043f00000e78010000410000388d00010430000000000403004b0000000004000019000011740000613d0000001e0400002900000000040404330000000305300210000000010600008a000000000556022f000000000565013f000000000454016f0000000103300210000000000334019f000011980000013d000000400100043d00000e7b02000041000007bb0000013d00000e3204000041000000200500003900000000070000190000001a0900002900000000089500190000000008080433000000000084041b000000200550003900000001044000390000002007700039000000000867004b000011830000413d000000000636004b000011960000813d0000000306300210000000f80660018f000000010700008a000000000667022f000000000676013f0000001a055000290000000005050433000000000565016f000000000054041b000000010330021000000001033001bf000000000032041b000000200200002900000e26022001980000119f0000c13d000000400100043d00000e3402000041000007bb0000013d0000002005000029000001c00050043f000000800200043d00000140000004430000016000200443000000a00300043d00000020020000390000018000200443000001a0003004430000004003000039000000c00400043d000001c000300443000001e0004004430000006003000039000002000030044300000220001004430000008001000039000001000300043d000002400010044300000260003004430000001d0100002900000280001004430000001f01000029000002a000100443000000c001000039000001400300043d000002c000100443000002e000300443000000e001000039000001600300043d000003000010044300000320003004430000010001000039000001800300043d000003400010044300000360003004430000012001000039000001a00300043d0000038000100443000003a0003004430000014001000039000003c000100443000003e00050044300000100002004430000000b01000039000001200010044300000e33010000410000388c0001042e000000400200043d0000001f0430018f0000000505300272000011dc0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000011d40000413d000000000604004b000011f10000c13d000011fe0000013d000000400100043d00000e7e02000041000007bb0000013d000000400200043d0000001f0430018f0000000505300272000011ef0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000011e70000413d000000000604004b000011fe0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300000002001000029000000a401100039000000000113034f000000000301043b00000e260130009c0000004a0000213d00000000040004160000001e010000290000036e0000013d000000000403004b000012180000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000012110000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000203004b000012270000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b000012200000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d00000020030000390000000004310436000000000302043300000000003404350000004001100039000000000403004b0000123c0000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000534004b000012360000413d000000000001042d000000000301001900000000040304330000000001420436000000000204004b000012490000613d00000000020000190000002003300039000000000503043300000000015104360000000102200039000000000542004b000012430000413d000000000001042d00000000430104340000000003320436000000000404043300000000004304350000004003100039000000000303043300000e2b03300197000000400420003900000000003404350000006003100039000000000303043300000e2b03300197000000600420003900000000003404350000008003100039000000000303043300000e2b0330019700000080042000390000000000340435000000a0031000390000000003030433000000a0042000390000000000340435000000c003100039000000000303043300000e2603300197000000c0042000390000000000340435000000e003100039000000000303043300000e2603300197000000e004200039000000000034043500000100031000390000000003030433000000000303004b0000000003000019000000010300c03900000100042000390000000000340435000001200110003900000000010104330000012003200039000001400400003900000000004304350000014005200039000000004301043400000000003504350000016001200039000000000203004b000012850000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b0000127e0000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001120019000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b0000000002000019000000010200403900000e2b0310009c000012990000213d0000000102200190000012990000c13d000000400010043f000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e270210009c000012b90000813d0000004002100039000000400020043f00000001020000390000000002210436000000400300043d00000e310430009c000012b90000213d000000c004300039000000400040043f000000800430003900000060050000390000000000540435000000a004300039000000000004043500000060043000390000000000040435000000400430003900000000000404350000002004300039000000000004043500000000000304350000000000320435000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d000104300000000003100079000000bf0330008a0000000202200367000000000202043b00000e5704000041000000000532004b0000000005000019000000000504401900000e570330019700000e5706200197000000000736004b000000000400a019000000000336013f00000e570330009c000000000405c019000000000304004b000012d20000613d0000000001120019000000000001042d00000000010000190000388d000104300000000012010434000000000202004b000012d80000613d000000000001042d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d000104300000000003010019000000000132004900000e5704000041000000bf0510008c0000000005000019000000000504201900000e5701100197000000000601004b000000000400801900000e570110009c000000000405c019000000000104004b0000135d0000613d000000400100043d00000e7f0410009c0000135f0000813d000000c004100039000000400040043f0000000204000367000000000534034f000000000505043b00000e260650009c0000135d0000213d00000000065104360000002005300039000000000754034f000000000707043b00000e2b0870009c0000135d0000213d00000000007604350000002005500039000000000654034f000000000606043b000000000706004b0000000007000019000000010700c039000000000776004b0000135d0000c13d000000400710003900000000006704350000002006500039000000000664034f000000000606043b000000600710003900000000006704350000004005500039000000000654034f000000000606043b00000e2b0760009c0000135d0000213d00000000083600190000001f0380003900000e5706000041000000000723004b0000000007000019000000000706801900000e570330019700000e5709200197000000000a93004b0000000006008019000000000393013f00000e570330009c000000000607c019000000000306004b0000135d0000c13d000000000384034f000000000303043b00000e2b0630009c0000135f0000213d0000001f06300039000000200700008a000000000676016f0000003f06600039000000000776016f000000400600043d0000000007760019000000000967004b0000000009000019000000010900403900000e2b0a70009c0000135f0000213d00000001099001900000135f0000c13d000000400070043f000000000736043600000020088000390000000009380019000000000229004b0000135d0000213d000000000884034f0000001f0230018f0000000509300272000013440000613d000000000a000019000000050ba00210000000000cb70019000000000bb8034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b0000133c0000413d000000000a02004b000013530000613d0000000509900210000000000898034f00000000099700190000000302200210000000000a090433000000000a2a01cf000000000a2a022f000000000808043b0000010002200089000000000828022f00000000022801cf0000000002a2019f000000000029043500000000023700190000000000020435000000800210003900000000006204350000002002500039000000000224034f000000000202043b000000a0031000390000000000230435000000000001042d00000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e270210009c000013760000813d0000004002100039000000400020043f00000001020000390000000002210436000000400300043d00000e290430009c000013760000213d0000004004300039000000400040043f0000002004300039000000000004043500000000000304350000000000320435000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e5702000041000000630310008c0000000003000019000000000302201900000e5701100197000000000401004b000000000200801900000e570110009c000000000203c019000000000102004b000013940000613d000000400100043d00000e270210009c000013960000813d0000004002100039000000400020043f00000002020003670000002403200370000000000303043b00000000033104360000004402200370000000000202043b0000000000230435000000000001042d00000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e800210009c000013b60000813d0000014002100039000000400020043f00000120021000390000006003000039000000000032043500000100021000390000000000020435000000e0021000390000000000020435000000c0021000390000000000020435000000a0021000390000000000020435000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d000104300004000000000002000000400500043d00000e800250009c0000142f0000813d0000014002500039000000400020043f000000000201041a00000000022504360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000400350003900000e2b042001970000000000430435000000800320027000000e2b0330019700000080045000390000000000340435000000400220027000000e2b02200197000000600350003900000000002304350000000302100039000000000202041a000000a00350003900000000002304350000000402100039000000000202041a00000e2602200197000000c00350003900000000002304350000000502100039000000000202041a000000e00350003900000e26042001970000000000430435000001000350003900000e81022001980000000002000019000000010200c03900000000002304350000000601100039000000000201041a000000010320019000000001042002700000007f0740018f000000000704c0190000001f0470008c00000000040000190000000104002039000000000443004b000014350000c13d000000400600043d0000000004760436000000000303004b000014150000613d000100000004001d000400000007001d000200000006001d000300000005001d000000000010043500000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2c011001c70000801002000039388b38860000040f00000001022001900000143b0000613d0000000407000029000000000207004b0000141c0000613d000000000201043b00000000010000190000000305000029000000020600002900000001080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000371004b0000140d0000413d0000141f0000013d000001000100008a000000000112016f0000000000140435000000000107004b000000200100003900000000010060190000141f0000013d0000000001000019000000030500002900000002060000290000003f01100039000000200200008a000000000221016f0000000001620019000000000221004b0000000002000019000000010200403900000e2b0310009c0000142f0000213d00000001022001900000142f0000c13d000000400010043f000001200150003900000000006104350000000001050019000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d0001043000000000001004350000000401000039000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f0000000102200190000014500000613d000000000101043b000000000101041a000000000101004b0000000001000019000000010100c039000000000001042d00000000010000190000388d000104300018000000000002001200000003001d000300000002001d000800000001001d000000e00040043f000000400100043d00000e270210009c00001b870000813d0000004002100039000000400020043f000000200210003900000060080000390000000000820435000000000001043500000003010000290000000021010434000200000002001d000400000001001d000000400100043d00000e290210009c00001b870000213d0000004002100039000000400020043f000000200210003900000000008204350000000000010435000000a00010043f000000040100002900000e2b0110009c00001b870000213d0000000401000029000000050b1002100000003f01b0003900000e610a100197000000400100043d0000000002a10019000000000312004b0000000003000019000000010300403900000e2b0420009c00001b870000213d000000010330019000001b870000c13d000000400020043f000000040200002900000000022104360000001f07b0018f0000000509b002720000148e0000613d00000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b00000000005604350000000104400039000000000594004b000014860000413d00150000000b001d00160000000a001d001300000009001d001700000008001d001400000007001d000000000207004b000014950000613d000000a00200043d0000002002200039000000000012043500000e8201000041000000400200043d0000000000120435001800000002001d00000004012000390000000802000029000000000021043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000100000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f000000010220019000001b930000613d000000000201043b000000000100041400000e2602200197000000040320008c000014b80000c13d00000003010003670000000103000031000014ca0000013d00000e240300004100000e240410009c0000000001038019000000180500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e24033001970003000000010355000000010220019000001bc20000613d0000001709000029000000160a000029000000150b00002900000018080000290000001f0230018f000000c00000043f0000000504300272000014db0000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014d30000413d000000000502004b000014ea0000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000d0020000000920000000d0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c00001b870000213d000000010220019000001b870000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b00001b850000613d000000000408043300000e2b0240009c00001b850000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b00001b850000c13d00000e6a0410009c00001b870000213d0000008004100039000000400040043f00000000540304340000000004410436000000000505043300000e260650009c00001b850000213d000000000054043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b00001b850000c13d000000400510003900000000004504350000006004300039000000000404043300000e2b0540009c00001b850000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b00001b850000c13d000000004303043400000e2b0530009c00001b870000213d0000001f053000390000000d0550017f0000003f055000390000000d0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c00001b870000213d000000010770019000001b870000c13d000000400060043f00000000063504360000000007430019000000000227004b00001b850000213d000000000203004b000015570000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b000015500000413d0000000002360019000000000002043500000060021000390000000000520435000000c00010043f000000400200043d0000000001010433000000000101004b00001bae0000613d0000000001a20019000000000321004b0000000003000019000000010300403900000e2b0410009c00001b870000213d000000010330019000001b870000c13d000000400010043f00000004030000290000000001320436000000000303004b0000158b0000613d0000000003000019000000400400043d00000e830540009c00001b870000213d0000014005400039000000400050043f0000012005400039000000000095043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000002005400039000000000005043500000000000404350000000005310019000000000045043500000020033000390000000004b3004b0000156e0000413d000000800020043f000000400f00043d0000000001af00190000000002f1004b0000000002000019000000010200403900000e2b0310009c00001b870000213d000000010220019000001b870000c13d000000400010043f000000040100002900000000011f04360000001306000029000000000206004b000015a60000613d00000000020000310000000202200367000000000300001900000005043002100000000005410019000000000442034f000000000404043b00000000004504350000000103300039000000000463004b0000159e0000413d000000140100006b000015a80000613d0000010000f0043f000000040100006b000017a20000613d000000120100002900070e260010019b00000e2403000041000000000200001900000003010000290000000001010433000000000121004b00001b8d0000a13d0000000504200210000900000004001d000000020140002900000000040104330000002005400039000000000105043300000e2b01100198000b00000002001d000a00000004001d000015d10000613d001700000001001d001800000005001d00000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f000000010220019000001b930000613d000000000101043b00000e2b01100197000000170110006b00000e24030000410000000a04000029000000180500002900001b9a0000a13d00000040014000390000000001010433000000c00200043d00000040022000390000000002020433000000000202004b000015da0000c13d000000000201004b00001ba00000c13d000000000101004b0000000001000019000000010100c039001600000001001d00000080014000390000000001010433001800000001001d000000000104043300130e260010019b000000000105043300110e2b0010019b0000006001400039000500000001001d0000000001010433001200000001001d000000400100043d000c00000001001d00000e830110009c00001b870000213d0000000c040000290000014001400039000000400010043f00000020024000390000000801000029001700000002001d0000000000120435000000000004043500000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000000c040000290000012002400039000e00000002001d000000180b0000290000000000b204350000010002400039001500000002001d00000016030000290000000000320435000000e0034000390000000702000029001600000003001d0000000000230435000000c002400039001400000002001d00000013030000290000000000320435000000a002400039001300000002001d000000120300002900000000003204350000006002400039001200000002001d0000001103000029000000000032043500000e2b011001970000004002400039001100000002001d00000000001204350000008001400039000600000001001d0000000000010435000000000a000019000000170100002900000000030104330000001301000029000000000201043300000015010000290000000004010433000000120100002900000000050104330000001101000029000000000601043300000016010000290000000007010433000000140100002900000000010104330000006008100210000000400100043d00000040091000390000000000890435000000600770021000000054081000390000000000780435000000c00660021000000068071000390000000000670435000000c00550021000000070061000390000000000560435000000000404004b00000e86040000410000000004006019000000780510003900000000004504350000007904100039000000000024043500000020021000390000000000320435000000990410003900000000530b0434000000000603004b000016520000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000736004b0000164b0000413d0000000004430019000000e005a0021000000000005404350000007d043000390000000000410435000000bc033000390000000d0430017f0000000003140019000000000443004b0000000004000019000000010400403900000e2b0530009c00000e240500004100001b870000213d000000010440019000001b870000c13d00180000000a001d000000400030043f00000e240320009c00000000020580190000004002200210000000000101043300000e240310009c00000000010580190000006001100210000000000121019f000000000200041400000e240320009c0000000002058019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000000101043b001000000001001d00000000001004350000000401000039000f00000001001d000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000000101043b000000000101041a000000000101004b0000168f0000613d0000000e01000029000000000b0104330000001801000029000000010110003900000e240a100197000016220000013d0000000c010000290000001002000029000000000021043500000000002004350000000f01000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f000000010220019000001b850000613d0000000c020000290000000002020433000000000101043b000000000021041b000000170200002900000000020204330000000103100039000000000023041b0000001102000029000000000202043300000e2b022001970000000203100039000000000403041a00000e8704400197000000000224019f00000012040000290000000004040433000000400440021000000e8804400197000000000242019f00000006040000290000000004040433000000800440021000000e8904400197000000000242019f000000000023041b000000130200002900000000020204330000000303100039000000000023041b0000001402000029000000000202043300000e26022001970000000403100039000000000403041a00000e8a04400197000000000224019f000000000023041b00000015020000290000000002020433000000000202004b00000e8b0200004100000000020060190000001603000029000000000303043300000e26033001970000000504100039000000000504041a00000e8c05500197000000000335019f000000000223019f000000000024041b0000000e02000029000000000402043300000000b504043400000e2b0250009c00000e240600004100001b870000213d000000060a10003900000000010a041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b00001b940000c13d000000200130008c00180000000a001d001700000005001d001600000004001d000017080000413d001400000003001d00150000000b001d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f000000010220019000001b850000613d00000017050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000014010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000e2406000041000000180a000029000000150b000029000017080000813d000000000002041b0000000102200039000000000312004b000017040000413d0000001f0150008c000017370000a13d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000170b0000290000000d03b00180000000000101043b000000160c000029000017980000613d0000002002000039000000000400001900000e24060000410000000a070000290000000c080000290000000509000029000000180a0000290000000005c200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000017200000413d0000000003b3004b000017330000813d0000000303b00210000000f80330018f000000010400008a000000000334022f000000000343013f0000000002c200190000000002020433000000000232016f000000000021041b0000000101b0021000000001011001bf0000000b04000029000017470000013d000000000105004b0000000a070000290000000c0800002900000005090000290000173e0000613d00000000010b04330000173f0000013d00000000010000190000000b040000290000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000000001a041b0000000001090433000000000201004b0000175f0000613d00000000001004350000000f01000029000000200010043f000000000100041400000e240210009c0000000001068019000000c00110021000000e5c011001c70000801002000039388b38860000040f000000010220019000001b850000613d000000000101043b000000000101041a000000000101004b00000e24060000410000000b040000290000000a070000290000000c0800002900001b9d0000613d000000800100043d0000000002010433000000000242004b00001b8d0000a13d000000090110002900000020011000390000000000810435000000800100043d0000000001010433000000000141004b00001b8d0000a13d000001000200043d0000000001020433000000000141004b00001b8d0000a13d000000090100002900000020011000390000000002210019000000a00370003900000000030304330000000000320435000000a00200043d000000200220003900000000020204330000000003020433000000000343004b00001b8d0000a13d0000000001210019000000100300002900000000003104350000000002070433000000400100043d0000000000310435000000000300041400000e240430009c000000000306801900000e240410009c00000000010680190000004001100210000000c003300210000000000113019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000e8e0400004100000007060000290000000807000029388b38810000040f000000010120019000001b850000613d0000000b020000290000000102200039000000040120006c00000e2403000041000015af0000413d000017a10000013d000000200200003900000e24060000410000000a070000290000000c080000290000000509000029000000180a0000290000000003b3004b0000172a0000413d000017330000013d000001000f00043d000000c00100043d000000e00d00043d000000800900043d000000002c0904340000000103c0008c000017bf0000c13d00000000340f0434000000000404004b00001b8d0000613d000000000502043300000000070304330000002001100039000000000101043300000e2608100198000017fc0000613d000000400b00043d000000000107004b001700000007001d000018840000613d00000e8f0100004100000000001b04350000000001000414000000040280008c000018870000c13d0000000103000031000000200130008c00000000040300190000002004008039000018c00000013d0000002001100039000000000101043300000e2608100198000017cf0000613d000000400e00043d00000e8f0100004100000000001e04350000000001000414000000040280008c001600000008001d0000181c0000c13d000000010b0000310000002001b0008c00000000040b00190000002004008039000018560000013d00000000010c004b000017de0000613d0000002001f0003900000000020f04330000000003000019000000000432004b00001b8d0000a13d000000050430021000000000044100190000000004040433000000000404004b00001ba30000c13d00000001033000390000000004c3004b000017d40000413d00000000010d004b000019d70000613d00180000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c00001b310000c13d00000001020000390000000101000031000000000301004b00001b400000c13d00001b6d0000013d000000000107004b00001ba30000c13d00000000010d004b000019d70000613d00180000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c000019d90000c13d00000001020000390000000101000031000000000301004b000019e80000c13d00001b6d0000013d00140000000c001d001500000009001d00170000000f001d00180000000d001d00000e240200004100000e240310009c000000000102801900000e2403e0009c00000000020e40190000004002200210000000c001100210000000000121019f00000e35011001c7000000000208001900130000000e001d388b38860000040f000000130e0000290000000003010019000000600330027000000e240b3001970000002004b0008c00000000040b001900000020040080390000001f0540018f00000005064002720000183f0000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000018370000413d000000000705004b0000184e0000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f000000000056043500010000000b001f00030000000103550000000102200190000000180d000029000000170f0000290000001509000029000000140c00002900001be40000613d0000001f01400039000000600110018f000000000ae1001900000000021a004b0000000002000019000000010200403900000e2b04a0009c00001b870000213d000000010220019000001b870000c13d0000004000a0043f0000002002b0008c00001b850000413d00000000050e0433000000000205004b0000000002000019000000010200c039000000000225004b00001b850000c13d00000000020c004b000018860000613d0000002002f0003900000000040f0433000000000505004b0000193e0000613d00000000050000190000000003000019000018750000013d00000001055000390000000006c5004b0000194a0000813d000000000654004b00001b8d0000a13d000000050650021000000000062600190000000006060433000000000706004b000018720000613d00000000076d004b00001bdc0000413d0000000003360019000000000d6d004900000001055000390000000006c5004b000018750000413d0000194a0000013d000000000a0b0019000018d80000013d000019490000013d001400000005001d00180000000d001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001500000008001d000000000208001900160000000b001d388b38860000040f000000160b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000018a90000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000018a10000413d000000000705004b000018b80000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000180d000029000000170700002900001c160000613d000000150800002900000014050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c00001b870000213d000000010110019000001b870000c13d0000004000a0043f000000200130008c00001b850000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b00001b850000c13d000000000101004b00001bac0000613d00000000017d004b00001bdc0000413d000000000d7d004900000e960100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000010300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b0000191a0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b000019130000413d000000000231001900000000000204350000000002000414000000040380008c00180000000d001d000019250000c13d0000000103000031000000200130008c0000000004030019000000200400803900001a320000013d0000001f011000390000000d0110017f00000e240300004100000e2404a0009c00160000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f000000000207004b00001a090000613d00000e2d011001c7000080090200003900000000030700190000000004080019000000000500001900001a0a0000013d0000000005000019000000000654004b00001b8d0000a13d000000050650021000000000062600190000000006060433000000000606004b00001bac0000c13d00000001055000390000000006c5004b0000193f0000413d0000000003000019001500000001001d00170000000b001d00000e920200004100000000002a04350000000402a000390000004004000039000000000042043500000000040904330000004405a0003900000000004504350000006405a0003900000005064002100000000007560019000000000604004b000019a80000613d0000000006000019000019650000013d0000001f098000390000000d0990017f0000000008780019000000000008043500000000077900190000000106600039000000000846004b000000000a0e00190000000009010019000019a80000813d000000000e0a00190000000008a70049000000640880008a000000000585043600000020099000390000000001090019000000000809043300000000a90804340000000009970436000000000a0a04330000000000a904350000004009800039000000000909043300000e2b09900197000000400a70003900000000009a04350000006009800039000000000909043300000e2b09900197000000600a70003900000000009a04350000008009800039000000000909043300000e2b09900197000000800a70003900000000009a0435000000a0098000390000000009090433000000a00a70003900000000009a0435000000c009800039000000000909043300000e2609900197000000c00a70003900000000009a0435000000e009800039000000000909043300000e2609900197000000e00a70003900000000009a043500000100098000390000000009090433000000000909004b0000000009000019000000010900c039000001000a70003900000000009a0435000001200880003900000000080804330000012009700039000000010a0000290000000000a90435000001400a700039000000009808043400000000008a04350000016007700039000000000a08004b0000195b0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa00039000000000b8a004b000019a00000413d0000195b0000013d00000000022700490000002404a00039000000000024043500000000080f04330000000002870436000000000508004b000019ba0000613d0000000005000019000000170b00002900000016040000290000001501000029000000200ff0003900000000060f043300000000026204360000000105500039000000000685004b000019b30000413d000019bd0000013d000000170b000029000000160400002900000015010000290000000007000414000000040540008c001700000003001d00180000000d001d00001abe0000613d0000000001a2004900000e240200004100000e2405a0009c00150000000a001d000000000502001900000000050a4019000000400650021000000e240510009c00000000010280190000006001100210000000000161019f00000e240570009c0000000007028019000000c002700210000000000121019f000000000203004b00001a930000613d00000e2d011001c70000800902000039000000000500001900001a940000013d000000000900001900001b2d0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b00001b6d0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001a060000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000019fe0000413d000000000603004b00001b600000c13d00001b6d0000013d0000000002080019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000160a00002900001a1e0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001a160000413d000000000705004b000000180d00002900001a2e0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000001bf50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c00001b870000213d000000010220019000001b870000c13d000000400010043f000000200230008c00001b850000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b00001b850000c13d000000000202004b00001bd20000613d00000000010d004b00001aec0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c00001a620000c13d0000000102000039000000010100003100001a6f0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e24011001970000001709000029000000000301004b00001b2b0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001a900000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00001a880000413d000000000603004b00001b1e0000c13d00001b2b0000013d0000000002040019388b38810000040f0000000003010019000000600330027000000e240b3001970000002004b0008c00000000040b001900000020040080390000001f0540018f0000000506400272000000150a00002900001aa80000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001aa00000413d000000000705004b000000180d00002900001ab80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f000000000056043500010000000b001f0003000000010355000000010220019000001c050000613d0000001f01400039000000600110018f0000000002a10019000000000112004b0000000001000019000000010100403900000e2b0420009c00001b870000213d000000010110019000001b870000c13d000000400020043f0000002001b0008c00001b850000413d00000000010a0433000000000301004b0000000003000019000000010300c039000000000331004b00001b850000c13d000000000101004b00001bd40000613d00000000010d004b00001aec0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000001b930000613d000000000101043b0000001803000029000000000131004b00001bb00000413d00000000010004140000000004000411000000040240008c00001aee0000c13d0000000102000039000000010100003100001afb0000013d000000170900002900001b2d0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e24011001970000001709000029000000000301004b00001b2b0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001b1c0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00001b140000413d000000000603004b00001b2b0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b00001b700000613d000000a00100043d0000000000910435000000a00100043d000000000001042d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b00001b6d0000613d00000e2b0310009c00001b870000213d0000001f031000390000000d0330017f0000003f033000390000000d0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00001b870000213d000000010550019000001b870000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200001b5e0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00001b560000413d000000000603004b00001b6d0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000000000900001900001b2d0000c13d000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d0001043000000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d00010430000000000001042f00000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e840200004100001ba50000013d000000400100043d00000e8d0200004100001ba50000013d000000400100043d00000e850200004100001ba50000013d000000400100043d00000e9102000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e910100004100001bdd0000013d00000e9e0100004100001bd50000013d000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d00010430000000400200043d0000001f0430018f000000050530027200001bcf0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bc70000413d000000000604004b00001c250000c13d00001c320000013d00000e970200004100001ba50000013d00000e9501000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f04b0018f00000000030b00190000000505b0027200001bf20000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bea0000413d000000000604004b00001c320000613d00001c250000013d000000400200043d0000001f0430018f000000050530027200001c020000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001bfa0000413d000000000604004b00001c320000613d00001c250000013d000000400200043d0000001f04b0018f00000000030b00190000000505b0027200001c130000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001c0b0000413d000000000604004b00001c320000613d00001c250000013d000000400200043d0000001f0430018f000000050530027200001c230000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001c1b0000413d000000000604004b00001c320000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d00010430001a000000000002001400000003001d000500000002001d000a00000001001d000000800040043f000000e00050043f000000400100043d00000e270210009c0000236c0000813d0000004002100039000000400020043f000000200210003900000060080000390000000000820435000000000001043500000005010000290000000021010434000400000002001d000600000001001d000000400100043d00000e290210009c0000236c0000213d0000004002100039000000400020043f000000200210003900000000008204350000000000010435000001000010043f000000060100002900000e2b0110009c0000236c0000213d0000000601000029000000050b1002100000003f01b0003900000e610a100197000000400100043d0000000002a10019000000000312004b0000000003000019000000010300403900000e2b0420009c0000236c0000213d00000001033001900000236c0000c13d000000400020043f000000060200002900000000022104360000001f07b0018f0000000509b0027200001c760000613d00000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b00000000005604350000000104400039000000000594004b00001c6e0000413d00170000000b001d00180000000a001d001500000009001d001900000008001d001600000007001d000000000207004b00001c7d0000613d000001000200043d0000002002200039000000000012043500000e8201000041000000400200043d0000000000120435001a00000002001d00000004012000390000000a02000029000000000021043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000200000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000023780000613d000000000201043b000000000100041400000e2602200197000000040320008c00001ca00000c13d0000000301000367000000010300003100001cb20000013d00000e240300004100000e240410009c00000000010380190000001a0500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e240330019700030000000103550000000102200190000023950000613d0000001909000029000000180a000029000000170b0000290000001a080000290000001f0230018f000000050430027200001cc20000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00001cba0000413d000000000502004b00001cd10000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000f0020000000920000000f0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c0000236c0000213d00000001022001900000236c0000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b0000236a0000613d000000000408043300000e2b0240009c0000236a0000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b0000236a0000c13d00000e6a0410009c0000236c0000213d0000008004100039000000400040043f00000000540304340000000004410436000100000004001d000000000405043300000e260540009c0000236a0000213d0000000105000029000000000045043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b0000236a0000c13d0000004005100039000300000005001d00000000004504350000006004300039000000000404043300000e2b0540009c0000236a0000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b0000236a0000c13d000000004303043400000e2b0530009c0000236c0000213d0000001f053000390000000f0550017f0000003f055000390000000f0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c0000236c0000213d00000001077001900000236c0000c13d000000400060043f00000000063504360000000007430019000000000227004b0000236a0000213d000000000203004b00001d410000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b00001d3a0000413d0000000002360019000000000002043500000060021000390000000000520435000000400200043d0000000001010433000000000101004b000023930000613d0000000001a20019000000000321004b0000000003000019000000010300403900000e2b0410009c0000236c0000213d00000001033001900000236c0000c13d000000400010043f00000006030000290000000001320436000000000303004b00001d740000613d0000000003000019000000400400043d00000e830540009c0000236c0000213d0000014005400039000000400050043f0000012005400039000000000095043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000002005400039000000000005043500000000000404350000000005310019000000000045043500000020033000390000000004b3004b00001d570000413d000000c00020043f000000400800043d0000000001a80019000000000281004b0000000002000019000000010200403900000e2b0310009c0000236c0000213d00000001022001900000236c0000c13d000000400010043f000000060100002900000000011804360000001506000029000000000206004b00001d8f0000613d00000000020000310000000202200367000000000300001900000005043002100000000005410019000000000442034f000000000404043b00000000004504350000000103300039000000000463004b00001d870000413d000000160100006b00001d910000613d000000a00080043f000000060100006b00001f8a0000613d000000140100002900090e260010019b00000e2403000041000000000200001900000005010000290000000001010433000000000121004b000023720000a13d0000000504200210000b00000004001d000000040140002900000000040104330000002005400039000000000105043300000e2b01100198000d00000002001d000c00000004001d00001dba0000613d001900000001001d001a00000005001d00000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000023780000613d000000000101043b00000e2b01100197000000190110006b00000e24030000410000000c040000290000001a050000290000237f0000a13d0000004001400039000000000101043300000003020000290000000002020433000000000202004b00001dc20000c13d000000000201004b000023850000c13d000000000101004b0000000001000019000000010100c039001800000001001d00000080014000390000000001010433001a00000001001d000000000104043300150e260010019b000000000105043300130e2b0010019b0000006001400039000700000001001d0000000001010433001400000001001d000000400100043d000e00000001001d00000e830110009c0000236c0000213d0000000e040000290000014001400039000000400010043f00000020024000390000000a01000029001900000002001d0000000000120435000000000004043500000e5b010000410000000000100439000000000100041400000e240210009c0000000001038019000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000000e040000290000012002400039001000000002001d0000001a0b0000290000000000b204350000010002400039001700000002001d00000018030000290000000000320435000000e0034000390000000902000029001800000003001d0000000000230435000000c002400039001600000002001d00000015030000290000000000320435000000a002400039001500000002001d000000140300002900000000003204350000006002400039001400000002001d0000001303000029000000000032043500000e2b011001970000004002400039001300000002001d00000000001204350000008001400039000800000001001d0000000000010435000000000a000019000000190100002900000000030104330000001501000029000000000201043300000017010000290000000004010433000000140100002900000000050104330000001301000029000000000601043300000018010000290000000007010433000000160100002900000000010104330000006008100210000000400100043d00000040091000390000000000890435000000600770021000000054081000390000000000780435000000c00660021000000068071000390000000000670435000000c00550021000000070061000390000000000560435000000000404004b00000e86040000410000000004006019000000780510003900000000004504350000007904100039000000000024043500000020021000390000000000320435000000990410003900000000530b0434000000000603004b00001e3a0000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000736004b00001e330000413d0000000004430019000000e005a0021000000000005404350000007d043000390000000000410435000000bc033000390000000f0430017f0000000003140019000000000443004b0000000004000019000000010400403900000e2b0530009c00000e24050000410000236c0000213d00000001044001900000236c0000c13d001a0000000a001d000000400030043f00000e240320009c00000000020580190000004002200210000000000101043300000e240310009c00000000010580190000006001100210000000000121019f000000000200041400000e240320009c0000000002058019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000000101043b001200000001001d00000000001004350000000401000039001100000001001d000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000000101043b000000000101041a000000000101004b00001e770000613d0000001001000029000000000b0104330000001a01000029000000010110003900000e240a10019700001e0a0000013d0000000e010000290000001202000029000000000021043500000000002004350000001101000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d0000000e020000290000000002020433000000000101043b000000000021041b000000190200002900000000020204330000000103100039000000000023041b0000001302000029000000000202043300000e2b022001970000000203100039000000000403041a00000e8704400197000000000224019f00000014040000290000000004040433000000400440021000000e8804400197000000000242019f00000008040000290000000004040433000000800440021000000e8904400197000000000242019f000000000023041b000000150200002900000000020204330000000303100039000000000023041b0000001602000029000000000202043300000e26022001970000000403100039000000000403041a00000e8a04400197000000000224019f000000000023041b00000017020000290000000002020433000000000202004b00000e8b0200004100000000020060190000001803000029000000000303043300000e26033001970000000504100039000000000504041a00000e8c05500197000000000335019f000000000223019f000000000024041b0000001002000029000000000402043300000000b504043400000e2b0250009c00000e24060000410000236c0000213d000000060a10003900000000010a041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000023790000c13d000000200130008c001a0000000a001d001900000005001d001800000004001d00001ef00000413d001600000003001d00170000000b001d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d00000019050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000016010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000e24060000410000001a0a000029000000170b00002900001ef00000813d000000000002041b0000000102200039000000000312004b00001eec0000413d0000001f0150008c00001f1f0000a13d0000000000a00435000000000100041400000e240210009c0000000001068019000000c00110021000000e2c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000190b0000290000000f03b00180000000000101043b000000180c00002900001f800000613d0000002002000039000000000400001900000e24060000410000000c070000290000000e0800002900000007090000290000001a0a0000290000000005c200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00001f080000413d0000000003b3004b00001f1b0000813d0000000303b00210000000f80330018f000000010400008a000000000334022f000000000343013f0000000002c200190000000002020433000000000232016f000000000021041b0000000101b0021000000001011001bf0000000d0400002900001f2f0000013d000000000105004b0000000c070000290000000e08000029000000070900002900001f260000613d00000000010b043300001f270000013d00000000010000190000000d040000290000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000000001a041b0000000001090433000000000201004b00001f470000613d00000000001004350000001101000029000000200010043f000000000100041400000e240210009c0000000001068019000000c00110021000000e5c011001c70000801002000039388b38860000040f00000001022001900000236a0000613d000000000101043b000000000101041a000000000101004b00000e24060000410000000d040000290000000c070000290000000e08000029000023820000613d000000c00100043d0000000002010433000000000242004b000023720000a13d0000000b0110002900000020011000390000000000810435000000c00100043d0000000001010433000000000141004b000023720000a13d000000a00200043d0000000001020433000000000141004b000023720000a13d0000000b0100002900000020011000390000000002210019000000a00370003900000000030304330000000000320435000001000200043d000000200220003900000000020204330000000003020433000000000343004b000023720000a13d0000000001210019000000120300002900000000003104350000000002070433000000400100043d0000000000310435000000000300041400000e240430009c000000000306801900000e240410009c00000000010680190000004001100210000000c003300210000000000113019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000e8e0400004100000009060000290000000a07000029388b38810000040f00000001012001900000236a0000613d0000000d020000290000000102200039000000060120006c00000e240300004100001d980000413d00001f890000013d000000200200003900000e24060000410000000c070000290000000e0800002900000007090000290000001a0a0000290000000003b3004b00001f120000413d00001f1b0000013d000000a00800043d000000800d00043d000000e00c00043d000000c00b00043d000000001f0b04340000000102f0008c00001fa70000c13d0000000023080434000000000303004b000023720000613d0000000005010433000000000e0204330000000101000029000000000101043300000e260710019800001fe90000613d000000400b00043d00000000010e004b00180000000e001d000020730000613d00000e8f0100004100000000001b04350000000001000414000000040270008c000020760000c13d0000000103000031000000200130008c00000000040300190000002004008039000020b10000013d0000000101000029000000000101043300000e260910019800001fb90000613d000000400e00043d00000e8f0100004100000000001e04350000000001000414000000040290008c00190000000c001d001600000008001d001700000009001d0000200c0000c13d0000000103000031000000200130008c00000000040300190000002004008039000020450000013d00000000010f004b00001fc80000613d000000200180003900000000020804330000000003000019000000000432004b000023720000a13d000000050430021000000000044100190000000004040433000000000404004b000023880000c13d00000001033000390000000004f3004b00001fbe0000413d00000000010c004b000023250000613d00000000010d004b000000000e000019000023660000613d001a0000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000023270000c13d00000001020000390000000101000031000000000301004b000023360000c13d000023630000013d00000000010e004b000023880000c13d00000000010c004b000023250000613d00000000010d004b000000000e000019000023660000613d001a0000000d001d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000022f50000c13d00000001020000390000000101000031000000000301004b000023040000c13d000023630000013d00150000000f001d00180000000b001d001a0000000d001d00000e240200004100000e240310009c000000000102801900000e2403e0009c00000000020e40190000004002200210000000c001100210000000000121019f00000e35011001c7000000000209001900140000000e001d388b38860000040f000000140e0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f00000005064002720000202e0000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020260000413d000000000705004b0000203d0000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000001a0d000029000000180b000029000000150f000029000023de0000613d00000016080000290000001f01400039000000600110018f000000000ae1001900000000021a004b0000000002000019000000010200403900000e2b04a0009c0000236c0000213d00000001022001900000236c0000c13d0000004000a0043f000000200230008c0000236a0000413d00000000050e0433000000000205004b0000000002000019000000010200c039000000000225004b0000236a0000c13d00000000020f004b000020750000613d00000020028000390000000004080433000000000505004b000021300000613d0000000005000019000000000e000019000020640000013d00000001055000390000000006f5004b0000213c0000813d000000000654004b000023720000a13d000000050650021000000000062600190000000006060433000000000706004b000020610000613d00000000076d004b000023d60000413d000000000ee60019000000000d6d004900000001055000390000000006f5004b000020640000413d0000213c0000013d000000000a0b0019000020c90000013d0000213b0000013d001500000005001d00190000000c001d001a0000000d001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001600000007001d000000000207001900170000000b001d388b38860000040f000000170b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000020990000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020910000413d000000000705004b000020a80000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000001a0d000029000000180e000029000000190c000029000024230000613d000000160700002900000015050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c0000236c0000213d00000001011001900000236c0000c13d0000004000a0043f000000200130008c0000236a0000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b0000236a0000c13d000000000101004b000023910000613d0000000001ed004b000023d60000413d000000000ded004900000e960100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000020300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b0000210b0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b000021040000413d000000000231001900000000000204350000000002000414000000040370008c001a0000000d001d000021160000c13d0000000103000031000000200130008c00000000040300190000002004008039000021f50000013d00190000000c001d0000001f011000390000000f0110017f00000e240300004100000e2404a0009c00170000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f00000000020e004b000021ca0000613d00000e2d011001c7000080090200003900000000030e001900000000040700190000000005000019000021cb0000013d0000000005000019000000000654004b000023720000a13d000000050650021000000000062600190000000006060433000000000606004b000023910000c13d00000001055000390000000006f5004b000021310000413d000000000e000019001500000003001d00000e920200004100000000002a04350000000402a000390000004004000039000000000042043500000000040b04330000004405a0003900000000004504350000006405a0003900000005064002100000000007560019000000000604004b000021990000613d0000000006000019000021560000013d0000001f098000390000000f0990017f0000000008780019000000000008043500000000077900190000000106600039000000000846004b000000000a030019000000000b0f0019000021990000813d00000000030a00190000000008a70049000000640880008a0000000005850436000000200bb00039000000000f0b001900000000080b043300000000a90804340000000009970436000000000a0a04330000000000a904350000004009800039000000000909043300000e2b09900197000000400a70003900000000009a04350000006009800039000000000909043300000e2b09900197000000600a70003900000000009a04350000008009800039000000000909043300000e2b09900197000000800a70003900000000009a0435000000a0098000390000000009090433000000a00a70003900000000009a0435000000c009800039000000000909043300000e2609900197000000c00a70003900000000009a0435000000e009800039000000000909043300000e2609900197000000e00a70003900000000009a043500000100098000390000000009090433000000000909004b0000000009000019000000010900c039000001000a70003900000000009a0435000001200880003900000000080804330000012009700039000000020a0000290000000000a90435000001400a700039000000009808043400000000008a04350000016007700039000000000a08004b0000214c0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa00039000000000b8a004b000021910000413d0000214c0000013d00000000022700490000002404a000390000000000240435000000160800002900000000090804330000000002970436000000000509004b000021ac0000613d000000000500001900000015030000290000001704000029000000190b0000290000002008800039000000000608043300000000026204360000000105500039000000000695004b000021a50000413d000021af0000013d00000015030000290000001704000029000000190b0000290000000006000414000000040540008c001a0000000d001d00180000000e001d000022850000613d0000000001a2004900000e240200004100000e2403a0009c00160000000a001d000000000302001900000000030a4019000000400330021000000e240510009c00000000010280190000006001100210000000000131019f00000e240360009c0000000006028019000000c002600210000000000121019f00000000020e004b000022580000613d00000e2d011001c7000080090200003900000000030e00190000000005000019000022590000013d0000000002070019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000170a000029000021df0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000021d70000413d000000000705004b0000001a0d000029000000180e000029000000190c000029000021f10000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000023ef0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c0000236c0000213d00000001022001900000236c0000c13d000000400010043f000000200230008c0000236a0000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b0000236a0000c13d000000000202004b000023cc0000613d00000000010c004b000023660000613d00000000010d004b000023660000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000022270000c13d00000001020000390000000101000031000022340000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000180e000029000000000301004b000022f20000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000022550000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000224d0000413d000000000603004b000022e50000c13d000022f20000013d0000000002040019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000160a0000290000226d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000022650000413d000000000705004b0000001a0d000029000000180e000029000000190b0000290000227f0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000023ff0000613d0000001f01400039000000600110018f0000000002a10019000000000112004b0000000001000019000000010100403900000e2b0420009c0000236c0000213d00000001011001900000236c0000c13d000000400020043f000000200130008c0000236a0000413d00000000010a0433000000000301004b0000000003000019000000010300c039000000000331004b0000236a0000c13d000000000101004b000023ce0000613d00000000010b004b000023660000613d00000000010d004b000023660000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000023780000613d000000000101043b0000001a03000029000000000131004b000023a50000413d00000000010004140000000004000411000000040240008c000022b50000c13d00000001020000390000000101000031000022c20000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000180e000029000000000301004b000022f20000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000022e30000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000022db0000413d000000000603004b000022f20000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000023660000c13d000023b70000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000023630000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000023220000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000231a0000413d000000000603004b000023560000c13d000023630000013d000000000e000019000023660000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000023630000613d00000e2b0310009c0000236c0000213d0000001f031000390000000f0330017f0000003f033000390000000f0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c0000236c0000213d00000001055001900000236c0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000023540000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000234c0000413d000000000603004b000023630000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000000000e000019000023b70000613d000001000100043d0000000000e10435000001000100043d000000000001042d00000000010000190000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d00010430000000000001042f00000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e84020000410000238a0000013d000000400100043d00000e8d020000410000238a0000013d000000400100043d00000e85020000410000238a0000013d000000400100043d00000e9102000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e9101000041000023d70000013d00000e9e01000041000023cf0000013d000000400200043d0000001f0430018f0000000505300272000023a20000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000239a0000413d000000000604004b000024320000c13d0000243f0000013d000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d00010430000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d0001043000000e97020000410000238a0000013d00000e9501000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f0430018f00000000090300190000000505300272000023ec0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000023e40000413d000000000604004b0000240f0000c13d0000241c0000013d000000400200043d0000001f0430018f0000000505300272000023fc0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000023f40000413d000000000604004b0000243f0000613d000024320000013d000000400200043d0000001f0430018f000000000903001900000005053002720000240d0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024050000413d000000000604004b0000241c0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002900210000000000121019f0000388d00010430000000400200043d0000001f0430018f0000000505300272000024300000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000024280000413d000000000604004b0000243f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300017000000000002000300000004001d001600000003001d000700000002001d000000400300043d00000e82020000410000000000230435001700000003001d0000000402300039001300000001001d000000000012043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000200000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f000000010220019000002a0f0000613d000000000201043b000000000100041400000e2602200197000000040320008c0000246a0000c13d000000030100036700000001030000310000247c0000013d00000e240300004100000e240410009c0000000001038019000000170500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e24033001970003000000010355000000010220019000002a5f0000613d00000017080000290000001f0230018f0000000504300272000024890000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000024810000413d000000000502004b000024980000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000a0020000000920000000a0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c00002a070000213d000000010220019000002a070000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b00002a0d0000613d000000000408043300000e2b0240009c00002a0d0000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b00002a0d0000c13d00000e6a0410009c00002a070000213d0000008004100039000000400040043f00000000540304340000000004410436000100000004001d000000000405043300000e260540009c00002a0d0000213d0000000105000029000000000045043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b00002a0d0000c13d000000400510003900000000004504350000006004300039000000000404043300000e2b0540009c00002a0d0000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b00002a0d0000c13d000000004303043400000e2b0530009c00002a070000213d0000001f053000390000000a0550017f0000003f055000390000000a0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c00002a070000213d000000010770019000002a070000c13d000000400060043f00000000063504360000000007430019000000000227004b00002a0d0000213d000000000203004b000025070000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b000025000000413d00000000023600190000000000020435000000600210003900000000005204350000000001010433000000000101004b00002a100000613d00000007010000290000000021010434000600000002001d000900000001001d00000e2b0110009c00002a070000213d000000090100002900000005011002100000003f0210003900000e6102200197000000400400043d0000000003240019001700000004001d000000000443004b0000000004000019000000010400403900000e2b0530009c00002a070000213d000000010440019000002a070000c13d000000400030043f000000170300002900000009040000290000000003430436001400000003001d000000000304004b000025480000613d00000060030000390000000004000019000000400500043d00000e830650009c00002a070000213d0000014006500039000000400060043f0000012006500039000000000036043500000100065000390000000000060435000000e0065000390000000000060435000000c0065000390000000000060435000000a0065000390000000000060435000000800650003900000000000604350000006006500039000000000006043500000040065000390000000000060435000000200650003900000000000604350000000000050435000000140640002900000000005604350000002004400039000000000514004b0000252b0000413d000000400300043d0000000002230019000800000003001d000000000332004b0000000003000019000000010300403900000e2b0420009c00002a070000213d000000010330019000002a070000c13d000000400020043f0000000802000029000000090300002900000000073204360000001f0210018f0000000501100272000025640000613d00000000030000310000000203300367000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000514004b0000255c0000413d000000000102004b000025660000613d000000090100006b001500000007001d000026560000613d000000160100002900120e260010019b000500040000003d000480100000003d000000000200001900000007010000290000000001010433000000000121004b00002a010000a13d001600000002001d0000000502200210001100000002001d00000006012000290000000001010433000b00000001001d0000000021010434000c00000002001d00000000001004350000000501000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000000402000029388b38860000040f000000010220019000002a0d0000613d000000000401043b000000000104041a000000000101004b00002a130000613d0000000106400039000000000106041a000000130110006c00002a100000c13d0000000505400039000000000105041a00000e2602100197000000120220006c00002a160000c13d00000e810110019800002a190000613d000d00000006001d000e00000005001d000f00000004001d0000000201400039001000000001001d000000000101041a00000e890110019800002a1c0000c13d00000e5b010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f000000010220019000002a0f0000613d000000000201043b000000800120021000000e89031001970000001005000029000000000105041a00000ea104100197000000000334019f000000000035041b000000400700043d00000e830370009c000000150600002900002a070000213d0000014003700039000000400030043f0000000f08000029000000000308041a00000000033704360000000d04000029000000000404041a00000e2b0220019700000080057000390000000000250435000000400210027000000e2b022001970000006005700039000000000025043500000e2b011001970000004002700039000000000012043500000000004304350000000301800039000000000101041a000000a00270003900000000001204350000000401800039000000000101041a00000e2601100197000000c00270003900000000001204350000000e01000029000000000101041a000000e00270003900000e26031001970000000000320435000001000270003900000e81011001980000000001000019000000010100c03900000000001204350000000601800039000000000201041a000000010320019000000001042002700000007f0840018f000000000804c0190000001f0480008c00000000040000190000000104002039000000000443004b00002a250000c13d000000400500043d0000000004850436000000000303004b000026070000613d000d00000004001d000e00000008001d000f00000005001d001000000007001d0000000000100435000000000100041400000e240210009c00000e2401008041000000c00110021000000e2c011001c70000801002000039388b38860000040f000000010220019000002a0d0000613d0000000e08000029000000000208004b0000260e0000613d000000000201043b0000000001000019000000150600002900000010070000290000000f050000290000000d090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000381004b000025ff0000413d000026120000013d000001000100008a000000000112016f0000000000140435000000000108004b00000020010000390000000001006019000026120000013d0000000001000019000000150600002900000010070000290000000f050000290000003f011000390000000a0210017f0000000001520019000000000221004b0000000002000019000000010200403900000e2b0310009c00002a070000213d000000010220019000002a070000c13d000000400010043f00000120017000390000000000510435000000170100002900000000010104330000001604000029000000000141004b000000110300002900002a010000a13d0000001401300029000000000071043500000017020000290000000002020433000000000242004b00002a010000a13d00000008020000290000000002020433000000000242004b00002a010000a13d00000000026300190000000c030000290000000003030433000000000032043500000017020000290000000002020433000000000242004b00002a010000a13d0000000001010433000000c00110003900000000020104330000000b010000290000000001010433000000400300043d0000000000130435000000000100041400000e240410009c00000e2405000041000000000105801900000e240430009c00000000030580190000004003300210000000c001100210000000000131019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000ea20400004100000012060000290000001307000029388b38810000040f000000010120019000002a0d0000613d00000016020000290000000102200039000000090120006c00000015070000290000256e0000413d0000001701000029000000000a0104330000000101a0008c000026720000c13d00000008010000290000000001010433000000000101004b00002a010000613d0000001401000029000000000501043300000000090704330000000101000029000000000101043300000e2608100198000026ad0000613d000000400b00043d000000000109004b000027320000613d00000e8f0100004100000000001b04350000000001000414000000040280008c000027360000c13d0000000103000031000000200130008c000000000403001900000020040080390000276e0000013d0000000101000029000000000101043300000e260f1001980000000802000029000026820000613d000000400b00043d00000e8f0100004100000000001b043500000000010004140000000402f0008c000026cc0000c13d0000000104000031000000200140008c00000000030400190000002003008039000027020000013d00000000010a004b000026900000613d00000000010204330000000002000019000000000321004b00002a010000a13d000000050320021000000000037300190000000003030433000000000303004b00002a2b0000c13d00000001022000390000000003a2004b000026860000413d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c000029c20000c13d00000001020000390000000101000031000000000301004b000029d10000c13d000029fe0000013d000000000109004b00002a2b0000c13d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c0000287e0000c13d00000001020000390000000101000031000000000301004b0000288d0000c13d000029fe0000013d00140000000a001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c700160000000f001d00000000020f001900130000000b001d388b38860000040f000000130b0000290000000003010019000000600330027000000e2404300197000000200340008c000000000304001900000020030080390000001f0530018f0000000506300272000026ed0000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000026e50000413d000000000705004b000026fc0000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000004001f00030000000103550000000102200190000000160f000029000000140a00002900002a830000613d0000001f01300039000000600110018f000000000eb1001900000000021e004b0000000002000019000000010200403900000e2b03e0009c00002a070000213d000000010220019000002a070000c13d0000004000e0043f000000200240008c00002a0d0000413d00000000030b0433000000000203004b0000000002000019000000010200c039000000000223004b00002a0d0000c13d00000000020a004b000027350000613d00000008020000290000000002020433000000000303004b000027ed0000613d000000000500001900000000030000190000001509000029000027220000013d00000001055000390000000006a5004b000027fa0000813d000000000652004b00002a010000a13d000000050650021000000000069600190000000006060433000000000706004b0000271f0000613d0000000308000029000000000768004b00002a2e0000413d0000000003360019000300000068005100000001055000390000000006a5004b000027220000413d000027fa0000013d000000000a0b00190000000307000029000027870000013d000027f90000013d001400000005001d001700000009001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001500000008001d000000000208001900160000000b001d388b38860000040f000000160b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000027580000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000027500000413d000000000705004b000027670000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000170900002900002ac60000613d000000150800002900000014050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c00002a070000213d000000010110019000002a070000c13d0000004000a0043f000000200130008c00002a0d0000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b00002a0d0000c13d000000000101004b00002a790000613d0000000307000029000000000197004b00002a7b0000413d000000000797004900000ea50100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000020300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b000027c90000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b000027c20000413d000000000231001900000000000204350000000002000414000000040380008c000300000007001d000027d40000c13d0000000103000031000000200130008c00000000040300190000002004008039000028d60000013d0000001f011000390000000a0110017f00000e240300004100000e2404a0009c00170000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f000000000209004b000028ae0000613d00000e2d011001c70000800902000039000000000309001900000000040800190000000005000019000028af0000013d00000000030000190000001506000029000000000532004b00002a010000a13d000000050530021000000000056500190000000005050433000000000505004b00002a300000c13d00000001033000390000000005a3004b000027ef0000413d000000000300001900000ea30200004100000000002e04350000000402e0003900000040050000390000000000520435000000170500002900000000050504330000004406e0003900000000005604350000006406e0003900000005075002100000000008670019000000000705004b000028550000613d0000000007000019000028120000013d0000001f0a9000390000000a0aa0017f0000000009890019000000000009043500000000088a00190000000107700039000000000957004b000028550000813d0000000009e80049000000640990008a000000000696043600000017090000290000002009900039001700000009001d000000000909043300000000ba090434000000000aa80436000000000b0b04330000000000ba0435000000400a900039000000000a0a043300000e2b0aa00197000000400b8000390000000000ab0435000000600a900039000000000a0a043300000e2b0aa00197000000600b8000390000000000ab0435000000800a900039000000000a0a043300000e2b0aa00197000000800b8000390000000000ab0435000000a00a900039000000000a0a0433000000a00b8000390000000000ab0435000000c00a900039000000000a0a043300000e260aa00197000000c00b8000390000000000ab0435000000e00a900039000000000a0a043300000e260aa00197000000e00b8000390000000000ab0435000001000a900039000000000a0a0433000000000a0a004b000000000a000019000000010a00c039000001000b8000390000000000ab043500000120099000390000000009090433000001200a800039000000020b0000290000000000ba0435000001400b80003900000000a909043400000000009b04350000016008800039000000000b09004b0000280a0000613d000000000b000019000000000c8b0019000000000dba0019000000000d0d04330000000000dc0435000000200bb00039000000000c9b004b0000284d0000413d0000280a0000013d00000000022800490000002405e000390000000000250435000000080200002900000000050204330000000002580436000000000605004b000028650000613d000000000600001900000008080000290000002008800039000000000708043300000000027204360000000106600039000000000756004b0000285f0000413d00000000050004140000000406f0008c000029620000613d0000000001e2004900000e240200004100000e2404e0009c00170000000e001d000000000402001900000000040e4019000000400440021000000e240610009c00000000010280190000006001100210000000000141019f00000e240450009c0000000005028019000000c002500210000000000121019f000000000203004b000029380000613d00000e2d011001c7000080090200003900000000040f00190000000005000019000029390000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000028ab0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000028a30000413d000000000603004b000029f10000c13d000029fe0000013d0000000002080019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000170a000029000028c30000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000028bb0000413d000000000705004b000028d20000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000002a930000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c00002a070000213d000000010220019000002a070000c13d000000400010043f000000200230008c00002a0d0000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b00002a0d0000c13d000000000202004b00002a6f0000613d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c000029080000c13d00000001020000390000000101000031000000000301004b000029170000c13d000029fe0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000029350000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b0000292d0000413d000000000603004b000029fe0000613d000029f10000013d00000000020f0019388b38810000040f0000000003010019000000600330027000000e2404300197000000200340008c000000000304001900000020030080390000001f0530018f0000000506300272000000170e0000290000294d0000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000029450000413d000000000705004b0000295c0000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000004001f0003000000010355000000010220019000002aa30000613d0000001f01300039000000600110018f0000000002e10019000000000112004b0000000001000019000000010100403900000e2b0320009c00002a070000213d000000010110019000002a070000c13d000000400020043f000000200140008c00002a0d0000413d00000000010e0433000000000301004b0000000003000019000000010300c039000000000331004b00002a0d0000c13d000000000101004b00002a710000613d000000030100006b00002a000000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f000000010220019000002a0f0000613d000000000101043b0000000303000029000000000131004b00002a380000413d00000000010004140000000004000411000000040240008c000029920000c13d00000001020000390000000101000031000000000301004b000029a10000c13d000029fe0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000029bf0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000029b70000413d000000000603004b000029fe0000613d000029f10000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000029fe0000613d00000e2b0310009c00002a070000213d0000001f031000390000000a0330017f0000003f033000390000000a0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c00002a070000213d000000010550019000002a070000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000029ef0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000029e70000413d000000000603004b000029fe0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b00002a4a0000613d000000000001042d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000000000001042f000000400100043d00000e9e0200004100002a1e0000013d000000400100043d00000e8d0200004100002a1e0000013d000000400100043d00000e9f0200004100002a1e0000013d000000400100043d00000e850200004100002a1e0000013d000000400100043d00000ea002000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e910200004100002a1e0000013d00000e900100004100002a310000013d00000e910100004100000000001e043500000e240100004100000e2402e0009c000000000e0180190000004001e0021000000e35011001c70000388d00010430000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d00010430000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d00010430000000400200043d0000001f0430018f000000050530027200002a6c0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a640000413d000000000604004b00002ad50000c13d00002ae20000013d00000ea60200004100002a1e0000013d00000ea401000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e910100004100002a7c0000013d00000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f0340018f000000050540027200002a900000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a880000413d000000000603004b00002ab20000c13d00002abf0000013d000000400200043d0000001f0430018f000000050530027200002aa00000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002a980000413d000000000604004b00002ae20000613d00002ad50000013d000000400200043d0000001f0340018f000000050540027200002ab00000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002aa80000413d000000000603004b00002abf0000613d0000000505500210000000000151034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f000000000015043500000e240100004100000e240320009c000000000201801900000040012002100000006002400210000000000121019f0000388d00010430000000400200043d0000001f0430018f000000050530027200002ad30000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00002acb0000413d000000000604004b00002ae20000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300018000000000002000100000005001d000400000004001d001700000003001d000800000002001d000000400300043d00000e82020000410000000000230435001800000003001d0000000402300039001500000001001d000000000012043500000e59010000410000000000100439000000000100041200000004001004430000014001000039000300000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000030e20000613d000000000201043b000000000100041400000e2602200197000000040320008c00002b0e0000c13d0000000301000367000000010300003100002b200000013d00000e240300004100000e240410009c0000000001038019000000180500002900000e240450009c00000000030540190000004003300210000000c001100210000000000131019f00000e78011001c7388b38860000040f0000000003010019000000600330027000010e240030019d00000e2403300197000300000001035500000001022001900000310b0000613d00000018080000290000001f0230018f000000050430027200002b2d0000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00002b250000413d000000000502004b00002b3c0000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000b0020000000920000000b0210017f0000000001820019000000000221004b0000000002000019000000010200403900000e2b0410009c000030da0000213d0000000102200190000030da0000c13d00000e57020000410000001f0430008c0000000004000019000000000402201900000e5705300197000000000605004b000000000200801900000e570550009c000000000204c019000000400010043f000000000202004b000030e00000613d000000000408043300000e2b0240009c000030e00000213d00000000028300190000000003840019000000000432004900000e5705000041000000800640008c0000000006000019000000000605401900000e5704400197000000000704004b000000000500a01900000e570440009c000000000506c019000000000405004b000030e00000c13d00000e6a0410009c000030da0000213d0000008004100039000000400040043f00000000540304340000000004410436000200000004001d000000000405043300000e260540009c000030e00000213d0000000205000029000000000045043500000040043000390000000004040433000000000504004b0000000005000019000000010500c039000000000554004b000030e00000c13d000000400510003900000000004504350000006004300039000000000404043300000e2b0540009c000030e00000213d00000000033400190000001f0430003900000e5705000041000000000624004b0000000006000019000000000605801900000e570440019700000e5707200197000000000874004b0000000005008019000000000474013f00000e570440009c000000000506c019000000000405004b000030e00000c13d000000004303043400000e2b0530009c000030da0000213d0000001f053000390000000b0550017f0000003f055000390000000b0650017f000000400500043d0000000006650019000000000756004b0000000007000019000000010700403900000e2b0860009c000030da0000213d0000000107700190000030da0000c13d000000400060043f00000000063504360000000007430019000000000227004b000030e00000213d000000000203004b00002bab0000613d000000000200001900000000076200190000000008420019000000000808043300000000008704350000002002200039000000000732004b00002ba40000413d00000000023600190000000000020435000000600210003900000000005204350000000001010433000000000101004b000030e30000613d00000008010000290000000021010434000700000002001d000a00000001001d00000e2b0110009c000030da0000213d0000000a0100002900000005011002100000003f0210003900000e6102200197000000400400043d0000000003240019001800000004001d000000000443004b0000000004000019000000010400403900000e2b0530009c000030da0000213d0000000104400190000030da0000c13d000000400030043f00000018030000290000000a040000290000000003430436001600000003001d000000000304004b00002bec0000613d00000060030000390000000004000019000000400500043d00000e830650009c000030da0000213d0000014006500039000000400060043f0000012006500039000000000036043500000100065000390000000000060435000000e0065000390000000000060435000000c0065000390000000000060435000000a0065000390000000000060435000000800650003900000000000604350000006006500039000000000006043500000040065000390000000000060435000000200650003900000000000604350000000000050435000000160640002900000000005604350000002004400039000000000514004b00002bcf0000413d000000400300043d0000000002230019000900000003001d000000000332004b0000000003000019000000010300403900000e2b0420009c000030da0000213d0000000103300190000030da0000c13d000000400020043f00000009020000290000000a0300002900000000073204360000001f0210018f000000050110027200002c080000613d00000000030000310000000203300367000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000514004b00002c000000413d000c00000007001d000000000102004b00002c0b0000613d0000000a0100006b00002cf60000613d000000170100002900140e260010019b000600040000003d000580100000003d000000000200001900000008010000290000000001010433000000000121004b000030d40000a13d001700000002001d0000000502200210001300000002001d00000007012000290000000001010433000d00000001001d0000000021010434000e00000002001d00000000001004350000000601000029000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000000502000029388b38860000040f0000000102200190000030e00000613d000000000401043b000000000104041a000000000101004b000030e60000613d0000000106400039000000000106041a000000150110006c000030e30000c13d0000000505400039000000000105041a00000e2602100197000000140220006c000030e90000c13d00000e8101100198000030ec0000613d000f00000006001d001000000005001d001100000004001d0000000201400039001200000001001d000000000101041a00000e8901100198000030ef0000c13d00000e5b010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000030e20000613d000000000201043b000000800120021000000e89031001970000001205000029000000000105041a00000ea104100197000000000334019f000000000035041b000000400600043d00000e830360009c000030da0000213d0000014003600039000000400030043f0000001107000029000000000307041a00000000033604360000000f04000029000000000404041a00000e2b0220019700000080056000390000000000250435000000400210027000000e2b022001970000006005600039000000000025043500000e2b011001970000004002600039000000000012043500000000004304350000000301700039000000000101041a000000a00260003900000000001204350000000401700039000000000101041a00000e2601100197000000c00260003900000000001204350000001001000029000000000101041a000000e00260003900000e26031001970000000000320435000001000260003900000e81011001980000000001000019000000010100c03900000000001204350000000601700039000000000201041a000000010320019000000001042002700000007f0740018f000000000704c0190000001f0470008c00000000040000190000000104002039000000000443004b000030f80000c13d000000400500043d0000000004750436000000000303004b00002ca90000613d000f00000004001d001000000007001d001100000005001d001200000006001d0000000000100435000000000100041400000e240210009c00000e2401008041000000c00110021000000e2c011001c70000801002000039388b38860000040f0000000102200190000030e00000613d0000001007000029000000000207004b00002cb00000613d000000000201043b0000000001000019000000120600002900000011050000290000000f080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000371004b00002ca10000413d00002cb30000013d000001000100008a000000000112016f0000000000140435000000000107004b0000002001000039000000000100601900002cb30000013d0000000001000019000000120600002900000011050000290000003f011000390000000b0210017f0000000001520019000000000221004b0000000002000019000000010200403900000e2b0310009c000030da0000213d0000000102200190000030da0000c13d000000400010043f00000120016000390000000000510435000000180100002900000000010104330000001704000029000000000141004b0000001303000029000030d40000a13d0000001601300029000000000061043500000018020000290000000002020433000000000242004b000030d40000a13d00000009020000290000000002020433000000000242004b000030d40000a13d0000000c023000290000000e030000290000000003030433000000000032043500000018020000290000000002020433000000000242004b000030d40000a13d0000000001010433000000c00110003900000000020104330000000d010000290000000001010433000000400300043d0000000000130435000000000100041400000e240410009c00000e2405000041000000000105801900000e240430009c00000000030580190000004003300210000000c001100210000000000131019f00000e2c011001c700000e26052001970000800d02000039000000040300003900000ea20400004100000014060000290000001507000029388b38810000040f0000000101200190000030e00000613d000000170200002900000001022000390000000a0120006c00002c120000413d00000018010000290000000008010433000000010180008c00002d140000c13d00000009010000290000000001010433000000000101004b000030d40000613d000000160100002900000000050104330000000c01000029000000000d0104330000000201000029000000000101043300000e260710019800002d520000613d000000400b00043d00000000010d004b00170000000d001d00002dd90000613d00000e8f0100004100000000001b04350000000001000414000000040270008c00002ddc0000c13d0000000103000031000000200130008c0000000004030019000000200400803900002e130000013d0000000201000029000000000101043300000e260f100198000000090200002900002d240000613d000000400a00043d00000e8f0100004100000000001a043500000000010004140000000402f0008c00002d740000c13d0000000103000031000000200130008c0000000004030019000000200400803900002daa0000013d000000000108004b00002d320000613d00000000010204330000000002000019000000000321004b000030d40000a13d00000005032002100000000c033000290000000003030433000000000303004b000030fe0000c13d0000000102200039000000000382004b00002d280000413d000000010100006b0000307d0000613d000000040100006b000000000d0000190000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c000030800000c13d00000001020000390000000101000031000000000301004b0000308f0000c13d000030bc0000013d00000000010d004b000030fe0000c13d000000010100006b0000307d0000613d000000040100006b000000000d0000190000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c0000304d0000c13d00000001020000390000000101000031000000000301004b0000305c0000c13d000030bc0000013d001500000008001d00000e240200004100000e240310009c000000000102801900000e2403a0009c00000000020a40190000004002200210000000c001100210000000000121019f00000e35011001c700170000000f001d00000000020f001900160000000a001d388b38860000040f000000160a0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200002d950000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002d8d0000413d000000000705004b00002da40000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000170f000029000031410000613d00000015080000290000001f01400039000000600110018f000000000ea1001900000000021e004b0000000002000019000000010200403900000e2b04e0009c000030da0000213d0000000102200190000030da0000c13d0000004000e0043f000000200230008c000030e00000413d00000000040a0433000000000204004b0000000002000019000000010200c039000000000224004b000030e00000c13d000000000208004b00002ddb0000613d00000009020000290000000002020433000000000404004b00002e910000613d0000000004000019000000000d00001900002dc90000013d0000000104400039000000000584004b00002e9d0000813d000000000542004b000030d40000a13d00000005054002100000000c055000290000000005050433000000000605004b00002dc60000613d0000000407000029000000000657004b000031010000413d000000000dd5001900040000005700510000000104400039000000000584004b00002dc90000413d00002e9d0000013d000000000a0b001900002e2c0000013d00002e9c0000013d001500000005001d00000e240200004100000e240310009c000000000102801900000e2403b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000e35011001c7001600000007001d000000000207001900180000000b001d388b38860000040f000000180b0000290000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200002dfd0000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002df50000413d000000000705004b00002e0c0000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000170d000029000031710000613d000000160700002900000015050000290000001f01400039000000600110018f000000000ab1001900000000011a004b0000000001000019000000010100403900000e2b02a0009c000030da0000213d0000000101100190000030da0000c13d0000004000a0043f000000200130008c000030e00000413d00000000010b0433000000000201004b0000000002000019000000010200c039000000000221004b000030e00000c13d000000000101004b000031370000613d00000004020000290000000001d2004b000031390000413d0004000000d2005100000ea50100004100000000001a04350000000401a00039000000200200003900000000002104350000002401a000390000000032050434000000000021043500000000010304330000004402a0003900000000001204350000004001500039000000000101043300000e2b011001970000006402a0003900000000001204350000006001500039000000000101043300000e2b011001970000008402a0003900000000001204350000008001500039000000000101043300000e2b01100197000000a402a000390000000000120435000000a0015000390000000001010433000000c402a000390000000000120435000000c001500039000000000101043300000e2601100197000000e402a000390000000000120435000000e001500039000000000101043300000e26011001970000010402a00039000000000012043500000100015000390000000001010433000000000101004b0000000001000019000000010100c0390000012402a000390000000000120435000001200150003900000000010104330000014402a00039000000030300002900000000003204350000016403a00039000000002101043400000000001304350000018403a00039000000000401004b00002e6e0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000514004b00002e670000413d000000000231001900000000000204350000000002000414000000040370008c00002e780000c13d0000000103000031000000200130008c0000000004030019000000200400803900002f4c0000013d0000001f011000390000000b0110017f00000e240300004100000e2404a0009c00180000000a001d000000000403001900000000040a40190000004004400210000001840110003900000e240510009c00000000010380190000006001100210000000000141019f00000e240420009c0000000002038019000000c002200210000000000112019f00000000020d004b00002f230000613d00000e2d011001c7000080090200003900000000030d00190000000004070019000000000500001900002f240000013d0000000004000019000000000542004b000030d40000a13d00000005054002100000000c055000290000000005050433000000000505004b000031030000c13d0000000104400039000000000584004b00002e920000413d000000000d00001900000ea30200004100000000002e04350000000402e0003900000040040000390000000000420435000000180400002900000000040404330000004405e0003900000000004504350000006405e0003900000005064002100000000007560019000000000604004b00002ef80000613d000000000600001900002eb50000013d0000001f098000390000000b0990017f0000000008780019000000000008043500000000077900190000000106600039000000000846004b00002ef80000813d0000000008e70049000000640880008a000000000585043600000018080000290000002008800039001800000008001d000000000808043300000000a90804340000000009970436000000000a0a04330000000000a904350000004009800039000000000909043300000e2b09900197000000400a70003900000000009a04350000006009800039000000000909043300000e2b09900197000000600a70003900000000009a04350000008009800039000000000909043300000e2b09900197000000800a70003900000000009a0435000000a0098000390000000009090433000000a00a70003900000000009a0435000000c009800039000000000909043300000e2609900197000000c00a70003900000000009a0435000000e009800039000000000909043300000e2609900197000000e00a70003900000000009a043500000100098000390000000009090433000000000909004b0000000009000019000000010900c039000001000a70003900000000009a0435000001200880003900000000080804330000012009700039000000030a0000290000000000a90435000001400a700039000000009808043400000000008a04350000016007700039000000000a08004b00002ead0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa00039000000000b8a004b00002ef00000413d00002ead0000013d00000000022700490000002404e000390000000000240435000000090200002900000000040204330000000002470436000000000504004b00002f080000613d000000000500001900000009070000290000002007700039000000000607043300000000026204360000000105500039000000000645004b00002f020000413d00000000040004140000000405f0008c00170000000d001d00002fdb0000613d0000000001e2004900000e240200004100000e2403e0009c00180000000e001d000000000302001900000000030e4019000000400330021000000e240510009c00000000010280190000006001100210000000000131019f00000e240340009c0000000004028019000000c002400210000000000121019f00000000020d004b00002fb00000613d00000e2d011001c7000080090200003900000000030d001900000000040f0019000000000500001900002fb10000013d0000000002070019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000180a00002900002f380000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002f300000413d000000000705004b000000170d00002900002f480000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000031510000613d0000001f01400039000000600210018f0000000001a20019000000000221004b0000000002000019000000010200403900000e2b0410009c000030da0000213d0000000102200190000030da0000c13d000000400010043f000000200230008c000030e00000413d00000000020a0433000000000302004b0000000003000019000000010300c039000000000332004b000030e00000c13d000000000202004b0000312d0000613d000000010100006b00000004010000290000304b0000613d000000000101004b0000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c00002f7f0000c13d0000000102000039000000010100003100002f8c0000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000170d000029000000000301004b000030490000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f00000000041404360000000305000367000000050110027200002fad0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00002fa50000413d000000000603004b0000303c0000c13d000030490000013d00000000020f0019388b38810000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000000180e00002900002fc50000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00002fbd0000413d000000000705004b000000170d00002900002fd50000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000031610000613d0000001f01400039000000600110018f0000000002e10019000000000112004b0000000001000019000000010100403900000e2b0420009c000030da0000213d0000000101100190000030da0000c13d000000400020043f000000200130008c000030e00000413d00000000010e0433000000000301004b0000000003000019000000010300c039000000000331004b000030e00000c13d000000000101004b0000312f0000613d000000010100006b00000004010000290000304b0000613d000000000101004b0000304b0000613d00000e930100004100000000001004390000000001000410000000040010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e94011001c70000800a02000039388b38860000040f0000000102200190000030e20000613d000000000101043b0000000403000029000000000131004b0000311b0000413d00000000010004140000000004000411000000040240008c0000300c0000c13d00000001020000390000000101000031000030190000013d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000170d000029000000000301004b000030490000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f0000000004140436000000030500036700000005011002720000303a0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000030320000413d000000000603004b000030490000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000030bf0000613d00000000010d0019000000000001042d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000030bc0000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f0000000004140436000000030500036700000005011002720000307a0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000030720000413d000000000603004b000030af0000c13d000030bc0000013d000000000d00001900000000010d0019000000000001042d00000e240200004100000e240510009c0000000001028019000000c00110021000000e2d011001c700008009020000390000000005000019388b38810000040f000000010220018f0003000000010355000000600110027000010e240010019d00000e2401100197000000000301004b000030bc0000613d00000e2b0310009c000030da0000213d0000001f031000390000000b0330017f0000003f033000390000000b0330017f000000400400043d0000000003340019000000000543004b0000000005000019000000010500403900000e2b0630009c000030da0000213d0000000105500190000030da0000c13d000000400030043f0000001f0310018f000000000414043600000003050003670000000501100272000030ad0000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b000030a50000413d000000000603004b000030bc0000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000310435000000000102004b000000000d0000190000304b0000c13d000000400100043d000000640210003900000e98030000410000000000320435000000440210003900000e9903000041000000000032043500000024021000390000003a03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9b011001c70000388d0001043000000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000000000001042f000000400100043d00000e9e02000041000030f10000013d000000400100043d00000e8d02000041000030f10000013d000000400100043d00000e9f02000041000030f10000013d000000400100043d00000e8502000041000030f10000013d000000400100043d00000ea002000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000002201000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e9102000041000030f10000013d00000e9001000041000031040000013d00000e910100004100000000001e043500000e240100004100000e2402e0009c000000000e0180190000004001e0021000000e35011001c70000388d00010430000000400200043d0000001f0430018f0000000505300272000031180000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031100000413d000000000604004b000031800000c13d0000318d0000013d000000400100043d000000440210003900000e9c03000041000000000032043500000024021000390000001d03000039000000000032043500000e9a02000041000000000021043500000004021000390000002003000039000000000032043500000e240200004100000e240310009c0000000001028019000000400110021000000e9d011001c70000388d0001043000000ea602000041000030f10000013d00000ea401000041000000000012043500000e240100004100000e240320009c0000000002018019000000400120021000000e35011001c70000388d0001043000000e91010000410000313a0000013d00000e900100004100000000001a043500000e240100004100000e2402a0009c000000000a0180190000004001a0021000000e35011001c70000388d00010430000000400200043d0000001f0430018f00000005053002720000314e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031460000413d000000000604004b0000318d0000613d000031800000013d000000400200043d0000001f0430018f00000005053002720000315e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031560000413d000000000604004b0000318d0000613d000031800000013d000000400200043d0000001f0430018f00000005053002720000316e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031660000413d000000000604004b0000318d0000613d000031800000013d000000400200043d0000001f0430018f00000005053002720000317e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000031760000413d000000000604004b0000318d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d000104300002000000000002000100000002001d000200000001001d00000000001004350000000501000039000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f0000000102200190000031bb0000613d000000000101043b000000000201041a00000e2b03200198000031bd0000c13d000000010300002900000e2b0630019700000e5e02200197000000000262019f000000000021041b00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2d011001c70000800d02000039000000030300003900000e5f040000410000000205000029388b38810000040f0000000101200190000031bb0000613d000000000001042d00000000010000190000388d00010430000000400100043d00000e5d02000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d000104300003000000000002000100000003001d000300000002001d00000e2601100197000200000001001d00000000001004350000000601000039000000200010043f00000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e5c011001c70000801002000039388b38860000040f0000000102200190000031fd0000613d000000000101043b00000003020000290000000000200435000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039388b38860000040f0000000102200190000031fd0000613d0000000306000029000000000101043b000000000201041a00000e2b03200198000031ff0000c13d000000010300002900000e2b0730019700000e5e02200197000000000272019f000000000021041b00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2d011001c70000800d02000039000000040300003900000e7a040000410000000205000029388b38810000040f0000000101200190000031fd0000613d000000000001042d00000000010000190000388d00010430000000400100043d00000e7902000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000ea70320009c000032540000813d00000005052002100000003f0350003900000e6104300197000000400300043d0000000004430019000000000634004b0000000006000019000000010600403900000e2b0740009c000032540000213d0000000106600190000032540000c13d000000400040043f00000000022304360000001f0450018f0000000505500272000032260000613d00000000060000310000000206600367000000000700001900000005087002100000000009820019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000321e0000413d000000000404004b000032280000613d0000000054010434000000000604004b0000324c0000613d00000000060000190000000007000019000032310000013d0000000106600039000000000846004b0000324c0000813d0000000008010433000000000868004b0000324e0000a13d00000005086002100000000008850019000000000808043300000000a9080434000000000b09004b0000322e0000613d000000000b000019000000000c080433000000000cbc004b0000324e0000a13d000000000c030433000000000c7c004b0000324e0000a13d000000050c700210000000000c2c0019000000050db00210000000000dda0019000000000d0d04330000000000dc04350000000107700039000000010bb00039000000000c9b004b0000323b0000413d0000322e0000013d0000000001030019000000000001042d00000e770100004100000000001004350000003201000039000000040010043f00000e78010000410000388d0001043000000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000ea80210009c0000325f0000413d000000400300003900000ea84210012a000032690000013d00000ea93210012a00000eaa0310009c000000000201a01900000eaa0310009c0000000003000019000000200300203900000eab0420009c00000010033081bf00000eac0220819700000eab4220812a00000ead0420009c000000080330803900000e2b0220819700000ead4220812a000027100420008c000000040330803900000e2402208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b0000000006000019000000010600403900000e2b0740009c000032a70000213d0000000106600190000032a70000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f0000000506600272000032960000613d0000000007000031000000020770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000328e0000413d000000000405004b000032980000613d00000000033200190000002103300039000000090510008c0000000a5110011a000000030550021000000eae0550021f00000eaf05500197000000010330008a000000000603043300000eb006600197000000000556019f00000000005304350000329a0000213d0000000001020019000000000001042d00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000500000000000200000e590100004100000000001004390000000001000412000400000001001d0000000400100443000000a001000039000300000001001d000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b00000e26011001970000000002000410000200000002001d000000000112004b000032f80000c13d00000e59010000410000000000100439000000040100002900000004001004430000008001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b000500000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000033550000613d000000000101043b000000050110006c000032f80000c13d00000e59010000410000000000100439000000040100002900000004001004430000006001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b000000000001042d000000400100043d000500000001001d000000200210003900000e3001000041000100000002001d000000000012043500000e5901000041000000000010043900000004010000290000000400100443000000c001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b00000005020000290000004002200039000000000012043500000e5901000041000000000010043900000004010000290000000400100443000000e0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000033550000613d000000000101043b00000005020000290000006002200039000000000012043500000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000033550000613d000000000101043b0000000504000029000000a00240003900000002030000290000000000320435000000800240003900000000001204350000000301000029000000000014043500000e7f0140009c000033560000813d0000000503000029000000c001300039000000400010043f00000e2401000041000000010400002900000e240240009c00000000040180190000004002400210000000000303043300000e240430009c00000000030180190000006003300210000000000223019f000000000300041400000e240430009c0000000003018019000000c001300210000000000121019f00000e2d011001c70000801002000039388b38860000040f00000001022001900000335c0000613d000000000101043b000000000001042d000000000001042f00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000b0000000000020000008002100039000600000002001d000000000202043300000e2b02200198000033770000613d000a00000002001d000b00000001001d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000035b40000613d000000000101043b00000e2b011001970000000a0110006b0000000b01000029000035ca0000413d0000002002100039000000000602043300000080026000390000000004020433000000200240003900000e240500004100000e240320009c00000000020580190000004002200210000000000404043300000e240340009c00000000040580190000006003400210000000000423019f00000040021000390000000002020433000200000002001d00000060026000390000000002020433000400000002001d00000020026000390000000002020433000b00000002001d00000040026000390000000002020433000a00000002001d0000000002010433000500000002001d0000006002100039000700000006001d0000000001060433000900000001001d000100000002001d0000000001020433000800000001001d000000000200041400000e240320009c0000000002058019000000c002200210000000000142019f00000e2d011001c70000801002000039388b38860000040f000000080300002900000e2604300197000000090300002900090e260030019b0000000a0300006b0000000003000019000000010300c039000800000003001d0000000b03000029000a0e2b0030019b0000000102200190000035b20000613d000000000101043b000300000001001d0000000701000029000000a0011000390000000001010433000700000001001d00000000004004350000000301000039000000200010043f000000000100041400000e240210009c00000e2401008041000000c00110021000000e5c011001c70000801002000039000b00000004001d388b38860000040f0000000b050000290000000102200190000035b20000613d000000000101043b000000000201041a000000010300008a000000000332004b000035c40000613d0000000103200039000000000031041b0000000601000029000000000101043300000e2b03100197000000400100043d0000016004100039000000000034043500000140031000390000000000230435000001200210003900000007030000290000000000320435000001000210003900000003030000290000000000320435000000e00210003900000004030000290000000000320435000000c00210003900000008030000290000000000320435000000a0021000390000000a030000290000000000320435000000800210003900000009030000290000000000320435000000600210003900000005030000290000000000320435000000400210003900000000005204350000016002000039000000000221043600000e6503000041000000000032043500000eb10310009c000035b50000813d0000018003100039000000400030043f00000e240400004100000e240320009c00000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000035b20000613d000000000101043b000900000001001d00000e590100004100000000001004390000000001000412000a00000001001d0000000400100443000000a001000039000800000001001d0000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b00000e26011001970000000002000410000700000002001d000000000112004b0000344d0000c13d00000e590100004100000000001004390000000a0100002900000004001004430000008001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b000b00000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b0110006c0000344d0000c13d00000e590100004100000000001004390000000a0100002900000004001004430000006001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000034a80000013d000000400100043d000b00000001001d000000200210003900000e3001000041000600000002001d000000000012043500000e590100004100000000001004390000000a010000290000000400100443000000c001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b020000290000004002200039000000000012043500000e590100004100000000001004390000000a010000290000000400100443000000e0010000390000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b020000290000006002200039000000000012043500000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f0000000102200190000035b40000613d000000000101043b0000000b04000029000000a00240003900000007030000290000000000320435000000800240003900000000001204350000000801000029000000000014043500000e310140009c000035b50000213d0000000b03000029000000c001300039000000400010043f00000e2401000041000000060400002900000e240240009c00000000040180190000004002400210000000000303043300000e240430009c00000000030180190000006003300210000000000223019f000000000300041400000e240430009c0000000003018019000000c001300210000000000121019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000035b20000613d000000000101043b000000400200043d00000022032000390000000904000029000000000043043500000e680300004100000000003204350000000203200039000000000013043500000e2401000041000000000300041400000e240430009c000000000301801900000e240420009c00000000020180190000004001200210000000c002300210000000000121019f00000e69011001c70000801002000039388b38860000040f0000000102200190000035b20000613d000000000601043b00000001010000290000000008010433000000020300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c000035b50000213d0000008001700039000000400010043f0000000004070433000000410440008c000035270000c13d000000000303043300000e6b0430009c000035270000213d000900000008001d000b00000002001d0000000002050433000a00000009001d0000000004090433000800000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435000700000007001d000000a003700039000000f8022002700000000000230435000000000000043500000e2402000041000000000300041400000e240430009c000000000302801900000e240410009c00000000010280190000004001100210000000c002300210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f00000005044002720000350a0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000035030000413d000000000605004b000035180000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f000300000001035500000001022001900000000b020000290000000a090000290000000904000029000035cd0000613d000000000100043300000e260310019800000008060000290000000707000029000035270000613d000000000141013f00000e2601100198000035b10000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b0000353e0000613d000000000500001900000000064500190000000007950019000000000707043300000000007604350000002005500039000000000635004b000035370000413d000000000443001900000000000404350000001f03300039000000200700008a000000000373016f00000064043000390000000000480435000000a303300039000000000473016f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c000035b50000213d0000000104400190000035b50000c13d000000400030043f00000000030804330000000006000414000000040420008c000035860000c13d00000001020000390000000104000031000000000104004b0000359c0000613d00000e2b0140009c000035b50000213d0000001f01400039000000000171016f0000003f01100039000000000171016f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c000035b50000213d0000000105500190000035b50000c13d000000400010043f0000001f0540018f000000000143043600000003060003670000000504400272000035760000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b0000356e0000413d000000000705004b0000359e0000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000359e0000013d00000e240400004100000e240510009c0000000001048019000000400110021000000e240530009c00000000030480190000006003300210000000000113019f00000e240360009c0000000006048019000000c003600210000000000131019f000b00000007001d388b38860000040f0000000b07000029000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b000035580000c13d00000080010000390000006003000039000000000202004b000035bb0000613d0000000002030433000000200320008c000035bb0000413d00000e5703000041000000200420008c0000000004000019000000000403401900000e5702200197000000000502004b000000000300a01900000e570220009c000000000304c019000000000203004b000035b20000c13d000000000101043300000e6d0110009c000035bb0000c13d000000000001042d00000000010000190000388d00010430000000000001042f00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e7d02000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000001101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e7b02000041000035bd0000013d000000400200043d0000001f0430018f0000000505300272000035da0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000035d20000413d000000000604004b000035e90000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d00010430000900000000000200000000030100190000008001300039000900000001001d000000000101043300000e2b011001980000360a0000613d000700000001001d000800000003001d00000e5b01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000e2b01100197000000070110006b0000000803000029000038250000413d0000002001300039000000000101043300000040023000390000000002020433000400000002001d0000000012010434000700000002001d0000000001010433000500000001001d0000000001030433000800000001001d0000006001300039000300000001001d000000000101043300000e2601100197000600000001001d00000000001004350000000301000039000000200010043f00000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e5c011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000101043b000000000201041a000000010300008a000000000332004b0000381f0000613d0000000103200039000000000031041b0000000901000029000000000101043300000e2b03100197000000400100043d000000e0041000390000000000340435000000c0031000390000000000230435000000a00210003900000005030000290000000000320435000000800210003900000007030000290000000000320435000000600210003900000008030000290000000000320435000000400210003900000006030000290000000000320435000000e002000039000600000002001d000000000221043600000e6003000041000000000032043500000eb20310009c0000380e0000813d0000010003100039000000400030043f00000e240400004100000e240320009c00000000020480190000004002200210000000000101043300000e240310009c00000000010480190000006001100210000000000121019f000000000200041400000e240320009c0000000002048019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000101043b000700000001001d00000e590100004100000000001004390000000001000412000800000001001d0000000400100443000000a001000039000500000001001d0000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000e26011001970000000002000410000200000002001d000000000112004b000036a80000c13d00000e59010000410000000000100439000000080100002900000004001004430000008001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b000900000001001d00000e2e010000410000000000100439000000000100041400000e240210009c00000e2401008041000000c00110021000000e2f011001c70000800b02000039388b38860000040f00000001022001900000380d0000613d000000000101043b000000090110006c000036a80000c13d00000e59010000410000000000100439000000080100002900000004001004430000006001000039000000240010044300000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000037030000013d000000400100043d000900000001001d000000200210003900000e3001000041000100000002001d000000000012043500000e5901000041000000000010043900000008010000290000000400100443000000c001000039000000240010044300000e2403000041000000000100041400000e240210009c0000000001038019000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000009020000290000004002200039000000000012043500000e590100004100000000001004390000000801000029000000040010044300000006010000290000002400100443000000000100041400000e240210009c00000e2401008041000000c00110021000000e67011001c70000800502000039388b38860000040f00000001022001900000380d0000613d000000000101043b00000009020000290000006002200039000000000012043500000e2e01000041000000000010043900000e2401000041000000000200041400000e240320009c0000000002018019000000c00120021000000e2f011001c70000800b02000039388b38860000040f00000001022001900000380d0000613d000000000101043b0000000904000029000000a00240003900000002030000290000000000320435000000800240003900000000001204350000000501000029000000000014043500000e310140009c0000380e0000213d0000000903000029000000c001300039000000400010043f00000e2401000041000000010400002900000e240240009c00000000040180190000004002400210000000000303043300000e240430009c00000000030180190000006003300210000000000223019f000000000300041400000e240430009c0000000003018019000000c001300210000000000121019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000101043b000000400200043d00000022032000390000000704000029000000000043043500000e680300004100000000003204350000000203200039000000000013043500000e2401000041000000000300041400000e240430009c000000000301801900000e240420009c00000000020180190000004001200210000000c002300210000000000121019f00000e69011001c70000801002000039388b38860000040f0000000102200190000038140000613d000000000601043b00000003010000290000000008010433000000040300002900000020013000390000000001010433000000400230003900000000040204330000000002030433000000f803200210000000400700043d0000006005700039000000000035043500000040037000390000000000430435000000200970003900000000001904350000004101000039000000000017043500000e260280019700000e6a0170009c0000380e0000213d0000008001700039000000400010043f0000000004070433000000410440008c000037820000c13d000000000303043300000e6b0430009c000037820000213d000700000008001d000900000002001d0000000002050433000800000009001d0000000004090433000600000006001d0000000000610435000000e0057000390000000000350435000000c0037000390000000000430435000500000007001d000000a003700039000000f8022002700000000000230435000000000000043500000e2402000041000000000300041400000e240430009c000000000302801900000e240410009c00000000010280190000004001100210000000c002300210000000000112019f00000e6c011001c70000000102000039388b38860000040f0000000003010019000000600330027000000e2403300197000000200430008c000000000403001900000020040080390000001f0540018f0000000504400272000037650000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b0000375e0000413d000000000605004b000037730000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000000090200002900000008090000290000000704000029000038280000613d000000000100043300000e260310019800000006060000290000000507000029000037820000613d000000000141013f00000e26011001980000380c0000613d000000400800043d000000440180003900000040030000390000000000310435000000200180003900000e6d030000410000000000310435000000240380003900000000006304350000000003070433000000640480003900000000003404350000008404800039000000000503004b000037990000613d000000000500001900000000064500190000000007590019000000000707043300000000007604350000002005500039000000000635004b000037920000413d000000000443001900000000000404350000001f03300039000000200700008a000000000373016f00000064043000390000000000480435000000a303300039000000000473016f0000000003840019000000000443004b0000000004000019000000010400403900000e2b0530009c0000380e0000213d00000001044001900000380e0000c13d000000400030043f00000000030804330000000006000414000000040420008c000037e10000c13d00000001020000390000000104000031000000000104004b000037f70000613d00000e2b0140009c0000380e0000213d0000001f01400039000000000171016f0000003f01100039000000000171016f000000400300043d0000000001130019000000000531004b0000000005000019000000010500403900000e2b0610009c0000380e0000213d00000001055001900000380e0000c13d000000400010043f0000001f0540018f000000000143043600000003060003670000000504400272000037d10000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000037c90000413d000000000705004b000037f90000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000037f90000013d00000e240400004100000e240510009c0000000001048019000000400110021000000e240530009c00000000030480190000006003300210000000000113019f00000e240360009c0000000006048019000000c003600210000000000131019f000900000007001d388b38860000040f0000000907000029000000010220018f0003000000010355000000600110027000010e240010019d00000e2404100197000000000104004b000037b30000c13d00000080010000390000006003000039000000000202004b000038160000613d0000000002030433000000200320008c000038160000413d00000e5703000041000000200420008c0000000004000019000000000403401900000e5702200197000000000502004b000000000300a01900000e570220009c000000000304c019000000000203004b000038140000c13d000000000101043300000e6d0110009c000038160000c13d000000000001042d000000000001042f00000e770100004100000000001004350000004101000039000000040010043f00000e78010000410000388d0001043000000000010000190000388d00010430000000400100043d00000e7d02000041000000000021043500000e240200004100000e240310009c0000000001028019000000400110021000000e35011001c70000388d0001043000000e770100004100000000001004350000001101000039000000040010043f00000e78010000410000388d00010430000000400100043d00000e7b02000041000038180000013d000000400200043d0000001f0430018f0000000505300272000038350000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000382d0000413d000000000604004b000038440000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000e240100004100000e240420009c000000000201801900000040012002100000006002300210000000000121019f0000388d00010430000000000001042f00000e240300004100000e240410009c0000000001038019000000400110021000000e240420009c00000000020380190000006002200210000000000112019f000000000200041400000e240420009c0000000002038019000000c002200210000000000112019f00000e2d011001c70000801002000039388b38860000040f0000000102200190000038600000613d000000000101043b000000000001042d00000000010000190000388d0001043000000000050100190000000000200439000000050130008c000038700000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000631004b000038680000413d00000e2401000041000000000200041400000e240420009c000000000201801900000e240430009c00000000030180190000006001300210000000c002200210000000000112019f00000eb3011001c70000000002050019388b38860000040f0000000102200190000038800000613d000000000101043b000000000001042d000000000001042f00003884002104210000000102000039000000000001042d0000000002000019000000000001042d00003889002104230000000102000039000000000001042d0000000002000019000000000001042d0000388b000004320000388c0001042e0000388d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffc04541530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf312e332e30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000008b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000ffffffffffffff3f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace000000020000000000000000000000000000030000000100000000000000000011a1e6970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000084b0196d00000000000000000000000000000000000000000000000000000000cf190f3300000000000000000000000000000000000000000000000000000000e71ff36400000000000000000000000000000000000000000000000000000000f10b5cc700000000000000000000000000000000000000000000000000000000f10b5cc800000000000000000000000000000000000000000000000000000000f17325e700000000000000000000000000000000000000000000000000000000e71ff36500000000000000000000000000000000000000000000000000000000ed24911d00000000000000000000000000000000000000000000000000000000cf190f3400000000000000000000000000000000000000000000000000000000d45c443500000000000000000000000000000000000000000000000000000000e30bb56300000000000000000000000000000000000000000000000000000000a6d4dbc600000000000000000000000000000000000000000000000000000000a6d4dbc700000000000000000000000000000000000000000000000000000000b469318d00000000000000000000000000000000000000000000000000000000b83010d30000000000000000000000000000000000000000000000000000000084b0196e000000000000000000000000000000000000000000000000000000009541152500000000000000000000000000000000000000000000000000000000a3112a640000000000000000000000000000000000000000000000000000000044adc90d000000000000000000000000000000000000000000000000000000004d00306f000000000000000000000000000000000000000000000000000000004d0030700000000000000000000000000000000000000000000000000000000054fd4d500000000000000000000000000000000000000000000000000000000079f7573a0000000000000000000000000000000000000000000000000000000044adc90e0000000000000000000000000000000000000000000000000000000046926267000000000000000000000000000000000000000000000000000000004cb7e9e50000000000000000000000000000000000000000000000000000000017d7de7b0000000000000000000000000000000000000000000000000000000017d7de7c000000000000000000000000000000000000000000000000000000002d0335ab000000000000000000000000000000000000000000000000000000003c042715000000000000000000000000000000000000000000000000000000000eabf6600000000000000000000000000000000000000000000000000000000012b11a170000000000000000000000000000000000000000000000000000000013893f6180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000001200000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000000000000000000000000000000000000400000000000000000000000002e26794600000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000005aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459fb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000fffffffffffffedf000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9ffeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076000000000000000000000000000000000000000000000000fffffffffffffe7f020000020000000000000000000000000000004400000000000000000000000019010000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a000000000000000000000000000000000000000800000000000000000000000001626ba7e00000000000000000000000000000000000000000000000000000000b3512b0c00000000000000000000000000000000000000000000000000000000290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000000000000000000000000000ffffffffffffffdf0f00000000000000000000000000000000000000000000000000000000000000756688fe0000000000000000000000000000000000000000000000000000000057b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb72e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffd7f4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ec9d6eeb0000000000000000000000000000000000000000000000000000000092a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22291ab7da6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffeff8baa579f00000000000000000000000000000000000000000000000000000000947d5a8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000fffffffffffffec00000000000000000000000ff0000000000000000000000000000000000000000a2ea7c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf08e8b93700000000000000000000000000000000000000000000000000000000157bd4c3000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000c5723b51000000000000000000000000000000000000000000000000000000008bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35ce46e0460000000000000000000000000000000000000000000000000000000011011294000000000000000000000000000000000000000000000000000000001574f9f30000000000000000000000000000000000000000000000000000000091db0b7e000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f390200000200000000000000000000000000000024000000000000000000000000e8bee83900000000000000000000000000000000000000000000000000000000e60c350500000000000000000000000000000000000000000000000000000000bd8ba84d000000000000000000000000000000000000000000000000000000006563697069656e74206d61792068617665207265766572746564000000000000416464726573733a20756e61626c6520746f2073656e642076616c75652c207208c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000416464726573733a20696e73756666696369656e742062616c616e63650000000000000000000000000000000000000000000064000000000000000000000000bf37b20e000000000000000000000000000000000000000000000000000000004ca8886700000000000000000000000000000000000000000000000000000000905e710700000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000fffffffffffffffffffffffffffffffff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f61588e5b2d900000000000000000000000000000000000000000000000000000000bf2f3a8b00000000000000000000000000000000000000000000000000000000e49617e100000000000000000000000000000000000000000000000000000000ccf3bb270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffe80000000000000000000000000000000000000000000000000ffffffffffffff000200000200000000000000000000000000000000000000000000000000000000a71f2fe062852ae73ce9c72ae4946b8ab9d018748c141964c3a3acbfc4074113\";\n\ntype EASConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EASConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EAS__factory extends ContractFactory {\n  constructor(...args: EASConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(registry, overrides || {});\n  }\n  override deploy(\n    registry: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(registry, overrides || {}) as Promise<\n      EAS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EAS__factory {\n    return super.connect(runner) as EAS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EASInterface {\n    return new Interface(_abi) as EASInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EAS {\n    return new Contract(address, _abi, runner) as unknown as EAS;\n  }\n}\n"
  },
  {
    "path": "deployments/zksync/types/factories/contracts/Indexer__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { Indexer, IndexerInterface } from \"../../contracts/Indexer\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAttestation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidOffset\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"Indexed\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getReceivedAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSchemaAttesterRecipientAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSentAttestationUIDCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"attester\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"schemaUID\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"reverseOrder\",\n        type: \"bool\",\n      },\n    ],\n    name: \"getSentAttestationUIDs\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"indexAttestation\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"attestationUIDs\",\n        type: \"bytes32[]\",\n      },\n    ],\n    name: \"indexAttestations\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"attestationUID\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isAttestationIndexed\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x00040000000000020015000000000002000000000701034f00000000010700190000006003100270000002120130019700030000001703550002000000070355000002120030019d0000000102200190000000250000c13d0000008002000039000000400020043f000000040210008c0000004c0000413d000000000207043b000000e002200270000002180320009c0000004e0000a13d000002190320009c000000730000a13d0000021a0320009c000000df0000213d0000021d0320009c0000013f0000613d0000021e0220009c0000004c0000c13d0000000002000416000000240110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b0842052f0000040f0000000001000019000008430001042e0000000002000416000000000202004b0000004c0000c13d0000001f0210003900000213022001970000010002200039000000400020043f0000001f0210018f0000000503100272000000380000613d00000000040000190000000505400210000000000657034f000000000606043b000001000550003900000000006504350000000104400039000000000534004b000000300000413d000000000402004b000000470000613d0000000503300210000000000437034f00000003022002100000010003300039000000000503043300000000052501cf000000000525022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000230435000000200110008c0000004c0000413d000001000100043d000002140210009c000000630000a13d00000000010000190000084400010430000002220320009c000000cb0000213d000002260320009c0000015b0000613d000002270320009c000001670000613d000002280220009c0000004c0000c13d0000000002000416000000240110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000301000039000000200010043f000000400200003900000000010000190000029f0000013d0000000103000039000000800030043f0000000302000039000000a00020043f000000c00000043f000000000401004b0000012e0000c13d000000400100043d000002160200004100000000002104350000021202000041000002120310009c0000000001028019000000400110021000000217011001c700000844000104300000021f0320009c000001800000613d000002200320009c000001d60000613d000002210220009c0000004c0000c13d0000000002000416000000a40110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d0000008402700370000000000302043b000000000203004b0000000002000019000000010200c039000d00000003001d000000000223004b0000004c0000c13d0000002402700370000000000202043b000c00000002001d0000004402700370000000000202043b000b00000002001d0000006402700370000000000202043b000a00000002001d0000000000100435000000200000043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000c00000002001d000900000003001d0000000002320436000800000002001d000000000010043500000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000905000029000000000205004b0000012c0000613d000000000101043b00000000020000190000000804000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000000c40000413d000004ac0000013d000002230320009c000001ea0000613d000002240320009c0000024a0000613d000002250120009c0000004c0000c13d0000000001000416000000000101004b0000004c0000c13d0000000001000412000f00000001001d000e00600000003d00000000010004150000000f0110008a0000000501100210084208240000040f0000021401100197000000800010043f0000022b01000041000008430001042e0000021b0320009c0000027c0000613d0000021c0220009c0000004c0000c13d0000000002000416000000a40110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d0000008402700370000000000302043b000000000203004b0000000002000019000000010200c039000d00000003001d000000000223004b0000004c0000c13d0000002402700370000000000202043b000c00000002001d0000004402700370000000000202043b000b00000002001d0000006402700370000000000202043b000a00000002001d00000000001004350000000101000039000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000c00000002001d000900000003001d0000000002320436000800000002001d000000000010043500000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000905000029000000000205004b000004a30000c13d0000000804000029000004ac0000013d000000e00010043f0000014000000443000001600030044300000020030000390000018000300443000001a0002004430000004002000039000001c000200443000001e0000004430000006002000039000002000020044300000220001004430000010000300443000000040100003900000120001004430000021501000041000008430001042e0000000002000416000000240310008c0000004c0000413d000000000202004b0000004c0000c13d0000000402700370000000000202043b0000022c0320009c0000004c0000213d0000002303200039000000000313004b0000004c0000813d0000000403200039000000000337034f000000000303043b000700000003001d0000022c0330009c0000004c0000213d000600240020003d000000070200002900000005022002100000000602200029000000000112004b0000004c0000213d000000070100006b000002a40000c13d0000000001000019000008430001042e0000000002000416000000440110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d0000000000100435000000200000043f000001730000013d0000000002000416000000440110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b000002140210009c0000004c0000213d00000000001004350000000101000039000000200010043f0000004002000039000c00000002001d0000000001000019000d0000000703530842080e0000040f0000000d0200035f0000002402200370000000000202043b0000000000200435000000200010043f00000000010000190000000c020000290000029f0000013d0000000002000416000000c40110008c0000004c0000413d000000000102004b0000004c0000c13d0000002401700370000000000101043b000d00000001001d000002140110009c0000004c0000213d0000004401700370000000000101043b000c00000001001d000002140110009c0000004c0000213d000000a401700370000000000201043b000000000102004b0000000001000019000000010100c039000b00000002001d000000000112004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000201000039000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000c020000290000000000200435000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000d00000002001d000c00000003001d0000000002320436000a00000002001d00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000c0200006b000004c40000c13d0000000a04000029000004ce0000013d0000000002000416000000240110008c0000004c0000413d000000000102004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000401000039000000200010043f000000400200003900000000010000190842080e0000040f000000000101041a000000ff011001900000000001000019000000010100c039000000800010043f0000022b01000041000008430001042e0000000001000416000000000101004b0000004c0000c13d0000000001000412000d00000001001d001500000001001d001400000000001d0000000001000415000000150110008a0000000501100210084208240000040f084207ba0000040f0013000d0000002d001200200000003d000c00000001001d0000000001000415000000130110008a0000000501100210084208240000040f084207ba0000040f0011000d0000002d001000400000003d000b00000001001d0000000001000415000000110110008a0000000501100210084208240000040f084207ba0000040f0000000c0200002900000020042000390000000003020433000c00000003001d000900000001001d000000400100043d000d00000001001d0000002002100039000a00000002001d0000000001040019084205000000040f00000237030000410000000c020000290000000d04200029000800000004001d000000200140003900000000003104350000000b0200002900000020012000390000000003020433000b00000003001d0000002102400039084205000000040f00000008020000290000000b012000290000002102100039000002370300004100000000003204350000002202100039000000090300002900000020013000390000000003030433000900000003001d084205000000040f0000000b020000290000000c01200029000000090310002900000002023000390000000d01000029000000000021043500000022023000390842051c0000040f0000002001000039000000400200043d000c00000002001d00000000011204360000000d030000290000000003030433000d00000003001d000000000031043500000040022000390000000a01000029084205000000040f0000000d010000290000001f01100039000000200200008a000000000121016f00000040011000390000021202000041000002120310009c00000000010280190000000c04000029000002120340009c000000000402801900000040024002100000006001100210000000000121019f000008430001042e0000000002000416000000840110008c0000004c0000413d000000000102004b0000004c0000c13d0000006401700370000000000201043b000000000102004b0000000001000019000000010100c039000d00000002001d000000000112004b0000004c0000c13d0000000401700370000000000101043b00000000001004350000000301000039000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a000000400200043d000c00000002001d000b00000003001d0000000002320436000a00000002001d00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d0000000b05000029000000000205004b000004900000c13d0000000a04000029000004990000013d0000000002000416000000640110008c0000004c0000413d000000000102004b0000004c0000c13d0000002401700370000000000101043b000d00000001001d000002140110009c0000004c0000213d0000004401700370000000000101043b000c00000001001d000002140110009c0000004c0000213d0000000401700370000000000101043b00000000001004350000000201000039000000200010043f0000004002000039000b00000002001d00000000010000190842080e0000040f0000000d020000290000000000200435000000200010043f00000000010000190000000b020000290842080e0000040f0000000c020000290000000000200435000000200010043f00000000010000190000000b020000290842080e0000040f000000000101041a000000800010043f0000022b01000041000008430001042e000a00040000003d000580100000003d000200600000003d000180050000003d0000000002000019000002ae0000013d0000000c020000290000000102200039000000070120006c000001590000813d000c00000002001d000000050120021000000006011000290000000201100367000000000101043b000d00000001001d00000000001004350000000a01000029000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700000005020000290842083d0000040f00000001022001900000004c0000613d000000000101043b000000000101041a000000ff01100190000002aa0000c13d000000400200043d0000022d010000410000000000120435000b00000002001d00000004012000390000000d0200002900000000002104350000022e01000041000000000010043900000000010004120000000400100443000000020100002900000024001004430000000001000414000002120210009c0000021201008041000000c0011002100000022f011001c700000001020000290842083d0000040f0000000102200190000004d90000613d000000000201043b00000000010004140000021402200197000000040320008c000002e50000c13d000000030100036700000001030000310000000b080000290000000502300272000002fb0000c13d000003040000013d000002120310009c000002120400004100000000010480190000000b05000029000002120350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f00000230011001c70842083d0000040f00000000030100190000006003300270000102120030019d000002120330019700030000000103550000000102200190000004dd0000613d0000000b080000290000000502300272000003040000613d000000000400001900000005054002100000000006580019000000000551034f000000000505043b00000000005604350000000104400039000000000524004b000002fc0000413d0000001f04300190000003130000613d0000000502200210000000000121034f00000000022800190000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f01300039000000200200008a000000000421016f0000000001840019000000000441004b000000000400001900000001040040390000022c0510009c000004be0000213d0000000104400190000004be0000c13d000000200430008c0000023107000041000000000400001900000000040740190000023105300197000000000605004b00000000060000190000000006072019000002310550009c000000000604c019000000400010043f000000000406004b0000004c0000c13d00000000050804330000022c0450009c0000004c0000213d000000000483001900000000078500190000000003740049000001400530008c0000023108000041000000000500001900000000050840190000023103300197000000000603004b00000000060000190000000006082019000002310330009c000000000605c019000000000306004b0000004c0000c13d000002320310009c000004be0000213d0000014003100039000000400030043f0000000053070434000000000331043600000000050504330000000000530435000000400570003900000000050504330000022c0650009c0000004c0000213d00000040061000390000000000560435000000600570003900000000050504330000022c0650009c0000004c0000213d00000060061000390000000000560435000000800570003900000000050504330000022c0650009c0000004c0000213d00000080061000390000000000560435000000a005100039000000a00670003900000000060604330000000000650435000000c0057000390000000006050433000002140560009c0000004c0000213d000000c0051000390000000000650435000000e0067000390000000008060433000002140680009c0000004c0000213d000000e006100039000000000086043500000100087000390000000008080433000000000908004b0000000009000019000000010900c039000000000998004b0000004c0000c13d00000100091000390000000000890435000001200870003900000000080804330000022c0980009c0000004c0000213d00000000077800190000001f08700039000000000948004b000002310c000041000000000900001900000000090c80190000023108800197000002310a400197000000000ba8004b000000000b000019000000000b0c40190000000008a8013f000002310880009c000000000b09c01900000000080b004b0000004c0000c13d00000000870704340000022c0970009c000004be0000213d0000001f09700039000000000929016f0000003f09900039000000000929016f000000400200043d0000000009920019000000000a29004b000000000a000019000000010a0040390000022c0b90009c000004be0000213d000000010aa00190000004be0000c13d000000400090043f0000000009720436000000000a87001900000000044a004b0000004c0000213d000000000407004b000003a30000613d0000000004000019000000000a940019000000000b840019000000000b0b04330000000000ba04350000002004400039000000000a74004b0000039c0000413d00000000047900190000000000040435000001200410003900000000002404350000000001010433000300000001001d000000000101004b000004da0000613d0000000001030433000b00000001001d0000000001060433000800000001001d0000000001050433000900000001001d0000000d0100002900000000001004350000000a01000029000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000903000029000902140030019b0000000803000029000802140030019b00000001022001900000004c0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000000b0100002900000000001004350000000301000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000400000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000004011000290000000d02000029000000000021041b00000009010000290000000000100435000000200000043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000b020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000400000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000004011000290000000d02000029000000000021041b000000080100002900000000001004350000000101000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000b020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000400000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000004011000290000000d02000029000000000021041b0000000b0100002900000000001004350000000201000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000008020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b00000009020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b000000000301041a0000022c0230009c000004be0000213d000b00000003001d0000000102300039000000000021041b00000000001004350000000001000414000002120210009c0000021201008041000000c0011002100000022a011001c700008010020000390842083d0000040f00000001022001900000004c0000613d000000000101043b0000000b011000290000000d02000029000000000021041b0000000001000414000002120210009c0000021201008041000000c00110021000000233011001c70000800d02000039000000020300003900000234040000410000000305000029084208380000040f0000000101200190000002aa0000c13d0000004c0000013d000000000101043b00000000020000190000000a04000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000004930000413d0000000c0100002900000000021400490842051c0000040f00000002010003670000002402100370000000000202043b0000004401100370000000000301043b0000000c01000029000004b20000013d000000000101043b00000000020000190000000804000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000004a60000413d0000000c0100002900000000021400490842051c0000040f0000000c010000290000000b020000290000000a030000290000000d04000029084207470000040f0000000002010019000000400100043d000d00000001001d0842050d0000040f0000000d0400002900000000014100490000021202000041000002120310009c0000000001028019000002440000013d000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000000101043b00000000020000190000000a040000290000000c05000029000000000301041a000000000434043600000001011000390000000102200039000000000352004b000004c80000413d0000000d0100002900000000021400490842051c0000040f00000002010003670000006402100370000000000202043b0000008401100370000000000301043b0000000d010000290000000b04000029000004b30000013d000000000001042f000000400100043d00000235020000410000006c0000013d000000400200043d0000001f0430018f0000000505300272000004ea0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000004e20000413d000000000604004b000004f90000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000021201000041000002120420009c000000000201801900000040012002100000006002300210000000000121019f0000084400010430000000000403004b0000050a0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000005030000413d00000000012300190000000000010435000000000001042d00000020030000390000000004310436000000000302043300000000003404350000004001100039000000000403004b0000051b0000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000534004b000005150000413d000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b000000000200001900000001020040390000022c0310009c000005290000213d0000000102200190000005290000c13d000000400010043f000000000001042d000002360100004100000000001004350000004101000039000000040010043f000002300100004100000844000104300006000000000002000600000001001d00000000001004350000000401000039000400000001001d000000200010043f00000212010000410000000002000414000002120320009c0000000002018019000000c00120021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000101041a000000ff01100190000007110000c13d000000400200043d0000022d010000410000000000120435000500000002001d0000000401200039000000060200002900000000002104350000022e010000410000000000100439000000000100041200000004001004430000006001000039000000240010044300000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022f011001c700008005020000390842083d0000040f00000001022001900000071a0000613d000000000201043b00000000010004140000021402200197000000040320008c000005620000c13d00000003010003670000000103000031000005740000013d0000021203000041000002120410009c00000000010380190000000505000029000002120450009c00000000030540190000004003300210000000c001100210000000000131019f00000230011001c70842083d0000040f00000000030100190000006003300270000102120030019d000002120330019700030000000103550000000102200190000007240000613d00000005080000290000001f0230018f0000000504300272000005810000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000005790000413d000000000502004b000005900000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000000200200008a000000000421016f0000000001840019000000000441004b000000000400001900000001040040390000022c0510009c000007140000213d0000000104400190000007140000c13d0000023104000041000000200530008c000000000500001900000000050440190000023106300197000000000706004b000000000400a019000002310660009c000000000405c019000000400010043f000000000404004b000007120000c13d00000000050804330000022c0450009c000007120000213d0000000004830019000000000785001900000000037400490000023105000041000001400630008c000000000600001900000000060540190000023103300197000000000803004b000000000500a019000002310330009c000000000506c019000000000305004b000007120000c13d000002320310009c000007140000213d0000014003100039000000400030043f0000000053070434000000000331043600000000050504330000000000530435000000400570003900000000050504330000022c0650009c000007120000213d00000040061000390000000000560435000000600570003900000000050504330000022c0650009c000007120000213d00000060061000390000000000560435000000800570003900000000050504330000022c0650009c000007120000213d00000080061000390000000000560435000000a005100039000000a00670003900000000060604330000000000650435000000c0057000390000000006050433000002140560009c000007120000213d000000c0051000390000000000650435000000e0067000390000000008060433000002140680009c000007120000213d000000e006100039000000000086043500000100087000390000000008080433000000000908004b0000000009000019000000010900c039000000000998004b000007120000c13d00000100091000390000000000890435000001200870003900000000080804330000022c0980009c000007120000213d00000000077800190000001f087000390000023109000041000000000a48004b000000000a000019000000000a0980190000023108800197000002310b400197000000000cb8004b00000000090080190000000008b8013f000002310880009c00000000090ac019000000000809004b000007120000c13d00000000870704340000022c0970009c000007140000213d0000001f09700039000000000929016f0000003f09900039000000000929016f000000400200043d0000000009920019000000000a29004b000000000a000019000000010a0040390000022c0b90009c000007140000213d000000010aa00190000007140000c13d000000400090043f0000000009720436000000000a78001900000000044a004b000007120000213d000000000407004b0000061d0000613d0000000004000019000000000a940019000000000b480019000000000b0b04330000000000ba04350000002004400039000000000a74004b000006160000413d00000000047900190000000000040435000001200410003900000000002404350000000001010433000100000001001d000000000101004b0000071b0000613d0000000001030433000500000001001d0000000001060433000300000001001d0000000001050433000200000001001d000000060100002900000000001004350000000401000029000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f0000000203000029000402140030019b0000000303000029000302140030019b0000000102200190000007120000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b000000050100002900000000001004350000000301000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000200000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000002011000290000000602000029000000000021041b00000004010000290000000000100435000000200000043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000005020000290000000000200435000000200010043f00000212010000410000000002000414000002120320009c0000000002018019000000c00120021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000200000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000002011000290000000602000029000000000021041b000000030100002900000000001004350000000101000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000005020000290000000000200435000000200010043f00000212010000410000000002000414000002120320009c0000000002018019000000c00120021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000200000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000002011000290000000602000029000000000021041b000000050100002900000000001004350000000201000039000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000003020000290000000000200435000000200010043f00000212030000410000000001000414000002120210009c0000000001038019000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000004020000290000000000200435000000200010043f0000000001000414000002120210009c0000021201008041000000c00110021000000229011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b000000000301041a0000022c0230009c000007140000213d000500000003001d0000000102300039000000000021041b000000000010043500000212030000410000000001000414000002120210009c0000000001038019000000c0011002100000022a011001c700008010020000390842083d0000040f0000000102200190000007120000613d000000000101043b00000005011000290000000602000029000000000021041b0000000001000414000002120210009c0000021201008041000000c00110021000000233011001c70000800d02000039000000020300003900000234040000410000000105000029084208380000040f0000000101200190000007120000613d000000000001042d00000000010000190000084400010430000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000000001042f000000400100043d000002350200004100000000002104350000021202000041000002120310009c0000000001028019000000400110021000000217011001c70000084400010430000000400200043d0000001f0430018f0000000505300272000007310000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000007290000413d000000000604004b000007400000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000021201000041000002120420009c000000000201801900000040012002100000006002300210000000000112019f00000844000104300000000057010434000000000607004b0000078a0000613d000000000627004b000007b10000a13d00000000082300190000000006270049000000000887004b00000000060380190000022c0360009c000007ab0000213d000000050a6002100000003f03a000390000023908300197000000400300043d0000000008830019000000000938004b000000000900001900000001090040390000022c0b80009c000007ab0000213d0000000109900190000007ab0000c13d000000400080043f00000000086304360000001f09a0018f000000050aa002720000076e0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed80019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000007660000413d000000000909004b000007700000613d000000000906004b000007880000613d000000000404004b000007920000613d000000010400008a0000000009000019000000000a290019000000000a4a013f000000000aa70019000000000b010433000000000bab004b000007a50000a13d000000000b030433000000000b9b004b000007a50000a13d000000050b900210000000000b8b0019000000050aa00210000000000aa50019000000000a0a04330000000000ab04350000000109900039000000000a69004b000007760000413d0000000001030019000000000001042d000000400300043d0000023a0130009c000007ab0000213d0000002001300039000000400010043f00000000000304350000000001030019000000000001042d000000000400001900000000072400190000000009010433000000000979004b000007a50000a13d0000000009030433000000000949004b000007a50000a13d0000000509400210000000000989001900000005077002100000000007750019000000000707043300000000007904350000000104400039000000000764004b000007930000413d0000000001030019000000000001042d000002360100004100000000001004350000003201000039000000040010043f00000230010000410000084400010430000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000400100043d000002380200004100000000002104350000021202000041000002120310009c0000000001028019000000400110021000000217011001c700000844000104300000023b0210009c000007bf0000413d00000040030000390000023b4210012a000007c90000013d0000023c3210012a0000023d0310009c000000000201a0190000023d0310009c000000000300001900000020030020390000023e0420009c00000010033081bf0000023f022081970000023e4220812a000002400420009c00000008033080390000022c02208197000002404220812a000027100420008c00000004033080390000021202208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b000000000600001900000001060040390000022c0740009c000008070000213d0000000106600190000008070000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f0000000506600272000007f60000613d0000000007000031000000020770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000007ee0000413d000000000405004b000007f80000613d00000000033200190000002103300039000000090510008c0000000a5110011a0000000305500210000002410550021f0000024205500197000000010330008a00000000060304330000024306600197000000000556019f0000000000530435000007fa0000213d0000000001020019000000000001042d000002360100004100000000001004350000004101000039000000040010043f00000230010000410000084400010430000000000001042f0000021203000041000002120410009c00000000010380190000004001100210000002120420009c00000000020380190000006002200210000000000112019f0000000002000414000002120420009c0000000002038019000000c002200210000000000112019f00000233011001c700008010020000390842083d0000040f0000000102200190000008220000613d000000000101043b000000000001042d000000000100001900000844000104300000022e0200004100000000002004390000000501100270000000000201003100000004002004430000000101010031000000240010044300000212010000410000000002000414000002120320009c0000000002018019000000c0012002100000022f011001c700008005020000390842083d0000040f0000000102200190000008370000613d000000000101043b000000000001042d000000000001042f0000083b002104210000000102000039000000000001042d0000000002000019000000000001042d00000840002104230000000102000039000000000001042d0000000002000019000000000001042d0000084200000432000008430001042e000008440001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000020000000000000000000000000000014000000100000000000000000083780ffe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000715ecdf500000000000000000000000000000000000000000000000000000000b616352900000000000000000000000000000000000000000000000000000000ea51994a00000000000000000000000000000000000000000000000000000000ea51994b00000000000000000000000000000000000000000000000000000000ec864cba00000000000000000000000000000000000000000000000000000000b616352a00000000000000000000000000000000000000000000000000000000bbbdc81800000000000000000000000000000000000000000000000000000000715ecdf60000000000000000000000000000000000000000000000000000000089a82fbe00000000000000000000000000000000000000000000000000000000af288efe0000000000000000000000000000000000000000000000000000000054fd4d4f0000000000000000000000000000000000000000000000000000000054fd4d500000000000000000000000000000000000000000000000000000000063bbf81b0000000000000000000000000000000000000000000000000000000065c40b9c000000000000000000000000000000000000000000000000000000002412e9cc00000000000000000000000000000000000000000000000000000000288a0a7b000000000000000000000000000000000000000000000000000000002f45f90e020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffa3112a6400000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000240000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf02000000000000000000000000000000000000000000000000000000000000002178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf9bd8ba84d000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000001da1572000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffdf0000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e4f264bc04d664e0f2878a0827bb419079824ea8e92d28842f33fdfb754230c\";\n\ntype IndexerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: IndexerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Indexer__factory extends ContractFactory {\n  constructor(...args: IndexerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, overrides || {}) as Promise<\n      Indexer & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Indexer__factory {\n    return super.connect(runner) as Indexer__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): IndexerInterface {\n    return new Interface(_abi) as IndexerInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Indexer {\n    return new Contract(address, _abi, runner) as unknown as Indexer;\n  }\n}\n"
  },
  {
    "path": "deployments/zksync/types/factories/contracts/SchemaRegistry__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SchemaRegistry,\n  SchemaRegistryInterface,\n} from \"../../contracts/SchemaRegistry\";\n\nconst _abi = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AlreadyExists\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"registerer\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        indexed: false,\n        internalType: \"struct SchemaRecord\",\n        name: \"schema\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"Registered\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getSchema\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"uid\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"contract ISchemaResolver\",\n            name: \"resolver\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"revocable\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schema\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct SchemaRecord\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"schema\",\n        type: \"string\",\n      },\n      {\n        internalType: \"contract ISchemaResolver\",\n        name: \"resolver\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"revocable\",\n        type: \"bool\",\n      },\n    ],\n    name: \"register\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x0002000000000002000e000000000002000100000001035500000000030100190000006003300270000000d30030019d000000d30330019700000001022001900000006b0000c13d0000008009000039000000400090043f000000040230008c000002750000413d000000000201043b000000e002200270000000d50420009c000000810000613d000000d60420009c000000a40000613d000000d70120009c000002750000c13d0000000001000416000000000101004b000002750000c13d0000000001000412000800000001001d000e00000001001d000d00000000001d00000000010004150000000e0110008a0000000501100210034503270000040f034502d30000040f000c00080000002d000b00200000003d000700000001001d00000000010004150000000c0110008a0000000501100210034503270000040f034502d30000040f000a00080000002d000900400000003d000600000001001d00000000010004150000000a0110008a0000000501100210034503270000040f034502d30000040f000000070200002900000020042000390000000003020433000700000003001d000500000001001d000000400100043d000800000001001d00000020021000390000000001040019034502770000040f000000e90300004100000007020000290000000804200029000400000004001d00000020014000390000000000310435000000060200002900000020012000390000000003020433000600000003001d0000002102400039034502770000040f000000040200002900000006012000290000002102100039000000e90300004100000000003204350000002202100039000000050300002900000020013000390000000003030433000500000003001d034502770000040f0000000602000029000000070120002900000005031000290000000202300039000000080100002900000000002104350000002202300039034502c00000040f0000002001000039000000400200043d000700000002001d00000000021204360000000801000029034502840000040f00000007040000290000000001410049000000d302000041000000d30310009c0000000001028019000000d30340009c000000000402801900000040024002100000006001100210000000000121019f000003460001042e000000e001000039000000400010043f0000000001000416000000000101004b000002750000c13d0000000101000039000000800010043f0000000302000039000000a00020043f000000c00000043f0000014000000443000001600010044300000020010000390000018000100443000001a0002004430000004003000039000001c000300443000001e00000044300000100001004430000012000200443000000d401000041000003460001042e0000000002000416000000240330008c000002750000413d000000000202004b000002750000c13d0000010002000039000000400020043f000000800000043f000000a00000043f000000c00000043f0000006002000039000000e00020043f0000000401100370000000000101043b0000000000100435000000200000043f000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000d8011001c70000801002000039034503400000040f0000000102200190000002750000613d000000400500043d000000d90250009c000001a70000a13d000000e70100004100000000001004350000004101000039000000040010043f000000e80100004100000347000104300000000002000416000000640430008c000002750000413d000000000202004b000002750000c13d0000000402100370000000000502043b000000dd0250009c000002750000213d0000002302500039000000000232004b000002750000813d0000000404500039000000000241034f000000000202043b000000dd0620009c000002750000213d00000000052500190000002405500039000000000335004b000002750000213d0000002403100370000000000303043b000000da05300197000000da0330009c000002750000213d0000004403100370000000000603043b000000000306004b0000000003000019000000010300c039000000000336004b000002750000c13d0000010003000039000000400030043f000000800000043f000000a00050043f000000c00060043f0000001f05200039000000200a00008a0000000005a5016f0000003f055000390000000005a5016f000000de0650009c0000009e0000813d0000010005500039000000400050043f0000002004400039000000000141034f0000001f0420018f000001000020043f0000000505200272000000e20000613d00000000060000190000000507600210000000000871034f000000000808043b000001200770003900000000008704350000000106600039000000000756004b000000da0000413d000000000604004b000000f10000613d0000000505500210000000000151034f00000003044002100000012005500039000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000120012000390000000000010435000000e00030043f000000c00400043d000000a00500043d000000400100043d0000002002100039000001000300043d000000000603004b000001030000613d000000000600001900000000072600190000012008600039000000000808043300000000008704350000002006600039000000000736004b000000fc0000413d000000000623001900000000000604350000006005500210000000000613001900000020076000390000000000570435000000df05000041000000000404004b0000000005006019000000340460003900000000005404350000001504300039000000000041043500000054033000390000000004a3016f0000000003140019000000000443004b00000000040000190000000104004039000000dd0530009c0000009e0000213d00000001044001900000009e0000c13d00080000000a001d000000400030043f000000d304000041000000d30320009c000000000204801900000040022002100000000001010433000000d30310009c00000000010480190000006001100210000000000121019f0000000002000414000000d30320009c0000000002048019000000c002200210000000000112019f000000e0011001c70000801002000039000700000009001d034503400000040f0000000102200190000002750000613d000000000101043b000600000001001d0000000000100435000000200000043f0000000001000414000000d30210009c000000d301008041000000c001100210000000d8011001c70000801002000039034503400000040f0000000102200190000002750000613d000000000101043b000000000101041a000000000101004b000001fe0000c13d0000000601000029000000800010043f0000000000100435000000200000043f000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000d8011001c70000801002000039034503400000040f0000000102200190000002750000613d000000000101043b000000800200043d000000000021041b000000e302000041000000c00300043d000000000303004b0000000002006019000000a00300043d000000da033001970000000104100039000000000504041a000000e405500197000000000335019f000000000223019f000000000024041b000000e00200043d000400000002001d0000000032020434000300000003001d000500000002001d000000dd0220009c0000009e0000213d0000000201100039000200000001001d000000000101041a000000010210019000000001011002700000007f0310018f000000000301c019000100000003001d0000001f0130008c00000000010000190000000101002039000000000112004b000001c10000c13d0000000101000029000000200110008c000001920000413d00000002010000290000000000100435000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000dc011001c70000801002000039034503400000040f0000000102200190000002750000613d00000005030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000001920000813d000000000002041b0000000102200039000000000312004b0000018e0000413d00000005010000290000001f0110008c000002070000a13d00000002010000290000000000100435000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000dc011001c70000801002000039034503400000040f0000000102200190000002750000613d00000005030000290000000803300180000000000101043b000002150000c13d0000002002000039000002200000013d000000000101043b0000008002500039000000400020043f000000000201041a00000000022504360000000103100039000000000303041a000000da0430019700000000004204350000004002500039000000db033001980000000003000019000000010300c03900000000003204350000000201100039000000000701041a000000010370019000000001067002700000007f0260018f00000000060260190000001f0460008c00000000040000190000000104002039000000000447013f0000000104400190000001c70000613d000000e70100004100000000001004350000002201000039000000040010043f000000e8010000410000034700010430000700000005001d000000400500043d0000000004650436000000000303004b000800000005001d000001df0000c13d000001000100008a000000000117016f0000000000140435000000000102004b0000002002000039000000000200601900000020022000390000000001050019034502c00000040f0000000702000029000000600120003900000008030000290000000000310435000000400100043d000800000001001d034502970000040f0000000804000029000000610000013d000400000007001d000500000004001d000600000006001d0000000000100435000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000dc011001c70000801002000039034503400000040f0000000102200190000002750000613d0000000402000029000000020220008c0000000002000019000000080500002900000006060000290000000507000029000001d30000413d000000000101043b00000000020000190000000003270019000000000401041a000000000043043500000001011000390000002002200039000000000362004b000001f60000413d000001d30000013d000000400100043d000000e1020000410000000000210435000000d302000041000000d30310009c00000000010280190000004001100210000000e2011001c70000034700010430000000050100006b00000000010000190000020c0000613d0000000301000029000000000101043300000005040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000022f0000013d00000020020000390000000004000019000000040600002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000002180000413d000000050330006c0000022c0000813d00000005030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f00000004022000290000000002020433000000000232016f000000000021041b0000000501000029000000010110021000000001011001bf0000000202000029000000000012041b0000002002000039000000400100043d0000000002210436000000800300043d0000000000320435000000a00200043d000000da0220019700000040031000390000000000230435000000c00200043d000000000202004b0000000002000019000000010200c039000000600310003900000000002304350000008002100039000000e00300043d00000007040000290000000000420435000000a004100039000000003203043400000000002404350000000006000411000000c004100039000000000502004b000002530000613d000000000500001900000000074500190000000008530019000000000808043300000000008704350000002005500039000000000725004b0000024c0000413d000000000342001900000000000304350000001f02200039000000080220017f000000d304000041000000d30310009c00000000010480190000004001100210000000c002200039000000d30320009c00000000020480190000006002200210000000000112019f0000000002000414000000d30320009c0000000002048019000000c002200210000000000112019f000000e0011001c70000800d020000390000000303000039000000e50400004100000006050000290345033b0000040f0000000101200190000002750000613d000000400100043d00000006020000290000000000210435000000d30210009c000000d3010080410000004001100210000000e6011001c7000003460001042e00000000010000190000034700010430000000000403004b000002810000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b0000027a0000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000203004b000002900000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b000002890000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d00000020030000390000000003310436000000005402043400000000004304350000000003050433000000da033001970000004004100039000000000034043500000040032000390000000003030433000000000303004b0000000003000019000000010300c0390000006004100039000000000034043500000060022000390000000002020433000000800310003900000080040000390000000000430435000000a00410003900000000320204340000000000240435000000c001100039000000000402004b000002b90000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000524004b000002b20000413d000000000312001900000000000304350000001f02200039000000200300008a000000000232016f0000000001120019000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000000dd0310009c000002cd0000213d0000000102200190000002cd0000c13d000000400010043f000000000001042d000000e70100004100000000001004350000004101000039000000040010043f000000e8010000410000034700010430000000ea0210009c000002d80000413d0000004003000039000000ea4210012a000002e20000013d000000eb3210012a000000ec0310009c000000000201a019000000ec0310009c00000000030000190000002003002039000000ed0420009c00000010033081bf000000ee02208197000000ed4220812a000000ef0420009c0000000803308039000000dd02208197000000ef4220812a000027100420008c0000000403308039000000d302208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b00000000060000190000000106004039000000dd0740009c000003200000213d0000000106600190000003200000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f00000005066002720000030f0000613d0000000007000031000000010770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000003070000413d000000000405004b000003110000613d00000000033200190000002103300039000000090510008c0000000a5110011a0000000305500210000000f00550021f000000f105500197000000010330008a0000000006030433000000f206600197000000000556019f0000000000530435000003130000213d0000000001020019000000000001042d000000e70100004100000000001004350000004101000039000000040010043f000000e8010000410000034700010430000000000001042f000000f302000041000000000020043900000005011002700000000002010031000000040020044300000001010100310000002400100443000000d3010000410000000002000414000000d30320009c0000000002018019000000c001200210000000f4011001c70000800502000039034503400000040f00000001022001900000033a0000613d000000000101043b000000000001042d000000000001042f0000033e002104210000000102000039000000000001042d0000000002000019000000000001042d00000343002104230000000102000039000000000001042d0000000002000019000000000001042d0000034500000432000003460001042e0000034700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000a2ea7c6e0000000000000000000000000000000000000000000000000000000060d7a2780000000000000000000000000000000000000000000000000000000054fd4d500200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000ff00000000000000000000000000000000000000000200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000023369fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000d0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e00000000000000000000000000000000000000200000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000000000000000000000000000006961adf2a241e1b40834fbd167d8a2cf1b79ba8bd33de8a935daa1ffe159be73\";\n\ntype SchemaRegistryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SchemaRegistryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SchemaRegistry__factory extends ContractFactory {\n  constructor(...args: SchemaRegistryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SchemaRegistry & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SchemaRegistry__factory {\n    return super.connect(runner) as SchemaRegistry__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SchemaRegistryInterface {\n    return new Interface(_abi) as SchemaRegistryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SchemaRegistry {\n    return new Contract(address, _abi, runner) as unknown as SchemaRegistry;\n  }\n}\n"
  },
  {
    "path": "deployments/zksync/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts",
    "content": "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../../../../common\";\nimport type {\n  EIP712Proxy,\n  EIP712ProxyInterface,\n} from \"../../../../contracts/eip712/proxy/EIP712Proxy\";\n\nconst _abi = [\n  {\n    inputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"eas\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessDenied\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEAS\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidShortString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"str\",\n        type: \"string\",\n      },\n    ],\n    name: \"StringTooLong\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UsedSignature\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyAttestationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"attestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getAttestTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"uid\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getAttester\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getDomainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getEAS\",\n    outputs: [\n      {\n        internalType: \"contract IEAS\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getRevokeTypeHash\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"recipient\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"expirationTime\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"bool\",\n                name: \"revocable\",\n                type: \"bool\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"refUID\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes\",\n                name: \"data\",\n                type: \"bytes\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct AttestationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"attester\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyAttestationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiAttestByDelegation\",\n    outputs: [\n      {\n        internalType: \"bytes32[]\",\n        name: \"\",\n        type: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData[]\",\n            name: \"data\",\n            type: \"tuple[]\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature[]\",\n            name: \"signatures\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct MultiDelegatedProxyRevocationRequest[]\",\n        name: \"multiDelegatedRequests\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"multiRevokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"schema\",\n            type: \"bytes32\",\n          },\n          {\n            components: [\n              {\n                internalType: \"bytes32\",\n                name: \"uid\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"value\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct RevocationRequestData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint8\",\n                name: \"v\",\n                type: \"uint8\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"r\",\n                type: \"bytes32\",\n              },\n              {\n                internalType: \"bytes32\",\n                name: \"s\",\n                type: \"bytes32\",\n              },\n            ],\n            internalType: \"struct Signature\",\n            name: \"signature\",\n            type: \"tuple\",\n          },\n          {\n            internalType: \"address\",\n            name: \"revoker\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint64\",\n            name: \"deadline\",\n            type: \"uint64\",\n          },\n        ],\n        internalType: \"struct DelegatedProxyRevocationRequest\",\n        name: \"delegatedRequest\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"revokeByDelegation\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x0004000000000002002600000000000200000000030100190000006004300270000005e60340019700030000003103550002000000010355000005e60040019d0000000102200190000000220000c13d0000008002000039001e00000002001d000000400020043f000000040230008c0000004b0000413d000000000201043b000000e002200270000005f70420009c0000004d0000213d000005ff0420009c000000a30000213d000006030420009c000001250000613d000006040420009c000002490000613d000006050120009c0000004b0000c13d0000000001000416000000000101004b0000004b0000c13d0000061601000041000000800010043f0000060801000041000017950001042e000001e002000039000000400020043f0000000002000416000000000202004b0000004b0000c13d0000001f02300039000005e702200197000001e002200039000000400020043f0000001f0230018f0000000504300272000000370000613d00000000050000190000000506500210000000000761034f000000000707043b000001e00660003900000000007604350000000105500039000000000645004b0000002f0000413d000000000502004b000000460000613d0000000504400210000000000141034f0000000302200210000001e004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f0000000000140435000000400130008c0000004b0000413d000001e00700043d000005e80170009c000000f90000a13d00000000010000190000179600010430000005f80420009c000001130000213d000005fc0420009c000001930000613d000005fd0420009c0000025b0000613d000005fe0220009c0000004b0000c13d000000240230008c0000004b0000413d0000000402100370000000000202043b000200000002001d000005e90220009c0000004b0000213d00000002020000290000002302200039000000000232004b0000004b0000813d00000002020000290000000402200039000000000221034f000000000202043b000100000002001d000005e90220009c0000004b0000213d0000000202000029000400240020003d000000010200002900000005022002100000000404200029000000000434004b0000004b0000213d0000003f042000390000061004400197000006110540009c0000010d0000213d0000008007400039000000400070043f0000000105000029000000800050043f000000000505004b000006050000c13d001d00000007001d0000061c01000041000000000017043500000004017000390000002002000039001600000002001d00000000002104350000002402700039000000800100043d0000000000120435000000440270003900000005031002100000000005230019001c00000001001d000000000301004b000006340000c13d000000000f050019001e0000000f001d000006090100004100000000001004390000000001000412000000040010044300000140010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000003000416000000010220019000000e470000613d000000000201043b0000000001000414000005e804200197000000040240008c000006920000c13d0000000301000367000000010300003100000e720000013d000006000420009c000001a10000613d000006010420009c0000028f0000613d000006020120009c0000004b0000c13d0000000001000416000000000101004b0000004b0000c13d0000000001000412001e00000001001d002600000001001d002500000000001d0000800501000039001d00000001001d0000004403000039001c00000003001d0000000004000415000000260440008a000000050440021000000609020000411794176b0000040f179411a90000040f0024001e0000002d002300200000003d001b00000001001d0000000004000415000000240440008a00000005044002100000001d0100002900000609020000410000001c030000291794176b0000040f179411a90000040f0022001e0000002d002100400000003d001a00000001001d0000000004000415000000220440008a00000005044002100000001d0100002900000609020000410000001c030000291794176b0000040f179411a90000040f0000001b0200002900000020042000390000000003020433001d00000003001d001b00000001001d000000400100043d001e00000001001d00000020021000390000000001040019179411760000040f00000624030000410000001d020000290000001e04200029001900000004001d000000200140003900000000003104350000001a0200002900000020012000390000000003020433001c00000003001d0000002102400039179411760000040f00000019020000290000001c0120002900000021021000390000062403000041000000000032043500000022021000390000001b0300002900000020013000390000000003030433001b00000003001d179411760000040f0000001c020000290000001d012000290000001b0310002900000002023000390000001e0100002900000000002104350000002202300039000004dc0000013d000002000200043d000005e90120009c0000004b0000213d0000001f01200039000005ea04000041000000000531004b00000000050000190000000005048019000005ea01100197000000000601004b0000000004008019000005ea0110009c000000000405c019000000000104004b0000004b0000c13d001e00000007001d000001e0012000390000000001010433000005e90410009c0000043d0000a13d000006270100004100000000001004350000004101000039000000040010043f00000628010000410000179600010430000005f90420009c000001b60000613d000005fa0120009c000004360000613d000005fb0120009c0000004b0000c13d0000000001000416000000000101004b0000004b0000c13d179411fc0000040f000000400200043d0000000000120435000005e601000041000005e60320009c0000000002018019000000400120021000000606011001c7000017950001042e000000240230008c0000004b0000413d0000000402100370000000000202043b000800000002001d000005e90220009c0000004b0000213d00000008020000290000002302200039000000000232004b0000004b0000813d00000008020000290000000402200039000000000121034f000000000101043b000700000001001d000005e90110009c0000004b0000213d0000000801000029000a00240010003d000000070100002900000005011002100000000a02100029000000000232004b0000004b0000213d0000003f021000390000061003200197000006110230009c0000010d0000213d0000008002300039000000400020043f0000000704000029000000800040043f000000000404004b000006170000c13d0000000001000412001d00000001001d000006090100004100000000001004390000001d01000029000000040010044300000140010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000060b020000410000000000200439000005e801100197001e00000001001d00000004001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060c011001c700008002020000391794178f0000040f000000010220019000000e470000613d000000000101043b000000000101004b0000004b0000613d000000400300043d000006340100004100000000001304350000000401300039000000200200003900000000002104350000002401300039000000800200043d0000000000210435001d00000003001d000000440330003900000005012002100000000001310019000000000402004b00000f1e0000c13d000000000200041400000000030004160000001e04000029000000040440008c00000f4d0000613d0000001d060000290000000001610049000005e604000041000005e60560009c000000000504001900000000050640190000004005500210000005e60610009c00000000010480190000006001100210000000000151019f000005e60520009c0000000002048019000000c002200210000000000121019f000000000203004b00000f410000c13d0000001e0200002900000f450000013d0000000001000416000000000101004b0000004b0000c13d0000000001000412002000000001001d001f01400000003d000080050100003900000044030000390000000004000415000000200440008a000000050440021000000609020000411794176b0000040f000002570000013d0000000001000416000000000101004b0000004b0000c13d0000000203000039000000000203041a000000010420019000000001052002700000007f0150018f000000000105c0190000001f0510008c00000000050000190000000105002039000000000552013f0000000105500190000004b40000613d000006270100004100000000001004350000002201000039000000040010043f00000628010000410000179600010430000001040230008c0000004b0000413d0000000402100370000000000202043b001e00000002001d000000800020043f0000002402100370000000000202043b000001200020043f0000004402100370000000000202043b000001400020043f0000012002000039000000a00020043f000001c002000039000000400020043f0000006402100370000000000202043b000000ff0320008c0000004b0000213d000001600020043f0000008402100370000000000202043b000001800020043f000000a402100370000000000202043b000001a00020043f0000016002000039000000c00020043f000000c402100370000000000202043b000005e80320009c0000004b0000213d000000e00020043f000000e401100370000000000101043b000005e90210009c0000004b0000213d000001000010043f00000080010000391794150b0000040f000006090100004100000000001004390000000001000412000000040010044300000140010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b001c05e80010019b000000400100043d001d00000001001d000005eb0110009c0000010d0000213d0000001d020000290000004001200039000000400010043f0000001e010000290000000001120436001e00000001001d000005ea010000410000000002000031000000640320008c00000000030000190000000003014019000005ea02200197000000000402004b000000000100a019000005ea0220009c000000000103c019000000000101004b0000004b0000c13d000000400100043d000005eb0210009c0000010d0000213d0000004002100039000000400020043f00000002020003670000002403200370000000000303043b00000000033104360000004402200370000000000202043b00000000002304350000001e0200002900000000001204350000060b0100004100000000001004390000001c010000290000000400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060c011001c700008002020000391794178f0000040f000000010220019000000e470000613d000000000101043b000000000101004b0000004b0000613d000000400400043d0000060d0100004100000000001404350000001d010000290000000001010433000000040240003900000000001204350000001e0100002900000000010104330000000021010434000000240340003900000000001304350000000001020433001e00000004001d00000044024000390000000000120435000000000300041600000000010004140000001c02000029000000040220008c00000f9c0000613d000005e602000041000005e60410009c00000000010280190000001e05000029000005e60450009c00000000020540190000004002200210000000c001100210000000000121019f000000000203004b00000f900000c13d0000060f011001c70000001c0200002900000f940000013d0000000002000416000000240330008c0000004b0000413d000000000202004b0000004b0000c13d0000000401100370000000000101043b00000000001004350000000301000039000000200010043f00000040020000390000000001000019179417550000040f000000000101041a000005e801100197000000800010043f0000060801000041000017950001042e0000000001000416000000000101004b0000004b0000c13d000006090100004100000000001004390000000001000412001e00000001001d000000040010044300000100010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000400700043d000000000101043b000000ff0210008c000004c30000c13d000000000300041a000000010430019000000001023002700000007f0120018f000000000102c0190000001f0210008c00000000020000190000000102002039000000000223013f0000000102200190000001b00000c13d0000000002170436000000000404004b000005450000613d0000000000000435000000000301004b00000000030000190000054b0000613d000006200400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000513004b000002870000413d0000054b0000013d000000240230008c0000004b0000413d0000000402100370000000000202043b001e00000002001d000005e90220009c0000004b0000213d0000001e0230006a000005ea04000041000000e40520008c00000000050000190000000005044019000005ea02200197000000000602004b000000000400a019000005ea0220009c000000000405c019000000000204004b0000004b0000c13d0000001e0200002900000004052000390000012002000039000000400020043f0000002004500039000000000441034f001d00000005001d000000000551034f000000000505043b001c00000005001d000000800050043f000000000404043b000005e90540009c0000004b0000213d0000001d064000290000000004630049000005ea05000041000000c00740008c00000000070000190000000007054019000005ea04400197000000000804004b000000000500a019000005ea0440009c000000000507c019000000000405004b0000004b0000c13d000001e004000039000000400040043f000000000561034f000000000505043b000005e80750009c0000004b0000213d000001200050043f0000002005600039000000000751034f000000000707043b000005e90870009c0000004b0000213d000001400070043f0000002005500039000000000751034f000000000707043b000000000807004b0000000008000019000000010800c039000000000887004b0000004b0000c13d000001600070043f0000002007500039000000000771034f000000000707043b000001800070043f0000004005500039000000000751034f000000000707043b000005e90870009c0000004b0000213d00000000076700190000001f06700039000000000636004b0000004b0000813d000000000671034f000000000606043b000005e90860009c0000010d0000213d0000001f08600039001b0020000000920000001b0880017f0000003f088000390000001b0880017f000006250980009c0000010d0000213d000001e008800039000000400080043f000001e00060043f00000020077000390000000008760019000000000838004b0000004b0000213d000000000771034f0000001f0860018f0000000509600272000002ff0000613d000000000a000019000000050ba00210000000000cb7034f000000000c0c043b000002000bb000390000000000cb0435000000010aa00039000000000b9a004b000002f70000413d000000000a08004b0000030e0000613d0000000509900210000000000797034f00000003088002100000020009900039000000000a090433000000000a8a01cf000000000a8a022f000000000707043b0000010008800089000000000787022f00000000078701cf0000000007a7019f00000000007904350000001e0700002900000044077000390000000003730049000005ea08000041000000600930008c00000000090000190000000009084019000005ea03300197000000000a03004b000000000800a019000005ea0330009c000000000809c01900000200036000390000000000030435000001a00040043f0000002003500039000000000331034f000000000303043b000001c00030043f000000a00020043f000000000208004b0000004b0000c13d000000400200043d000006130320009c0000010d0000213d0000006003200039000000400030043f000000000371034f000000000303043b000000ff0430008c0000004b0000213d00000000033204360000002004700039000000000441034f000000000404043b00000000004304350000004003700039000000000331034f000000000303043b00000040042000390000000000340435000000c00020043f0000006002700039000000000321034f000000000303043b000005e80430009c0000004b0000213d000000e00030043f001a00200020003d0000001a01100360000000000101043b000005e90210009c0000004b0000213d000001000010043f0000008001000039179412ad0000040f00000000050000310000001e0150006a000000c30210008a0000001a01000029000000a00310008a0000000201000367000000000331034f000000000303043b000005ea04000041000000000623004b00000000060000190000000006048019000005ea02200197000005ea07300197000000000827004b0000000004008019000000000227013f000005ea0220009c000000000406c019000000000204004b0000004b0000c13d000000400200043d000005eb0420009c0000010d0000213d0000001d073000290000004003200039000000400030043f0000001c0300002900000000033204360000000004750049000005ea06000041000000c00840008c00000000080000190000000008064019000005ea04400197000000000904004b000000000600a019000005ea0440009c000000000608c019000000000406004b0000004b0000c13d000000400400043d000005f20640009c0000010d0000213d000000c006400039000000400060043f000000000671034f000000000606043b000005e80860009c0000004b0000213d00000000086404360000002006700039000000000961034f000000000909043b000005e90a90009c0000004b0000213d00000000009804350000002006600039000000000861034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004b0000c13d000000400940003900000000008904350000002008600039000000000881034f000000000808043b000000600940003900000000008904350000004006600039000000000861034f000000000808043b000005e90980009c0000004b0000213d000000000a7800190000001f07a00039000005ea08000041000000000957004b00000000090000190000000009088019000005ea07700197000005ea0b500197000000000cb7004b00000000080080190000000007b7013f000005ea0770009c000000000809c019000000000708004b0000004b0000c13d0000000007a1034f000000000707043b000005e90870009c0000010d0000213d0000001f087000390000001b0880017f0000003f088000390000001b0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b004039000005e90c90009c0000010d0000213d000000010bb001900000010d0000c13d000000400090043f0000000009780436000000200aa00039000000000ba7001900000000055b004b0000004b0000213d000000000aa1034f0000001f0570018f000000050b700272000003c60000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000003be0000413d000000000c05004b000003d50000613d000000050bb00210000000000aba034f000000000bb900190000000305500210000000000c0b0433000000000c5c01cf000000000c5c022f000000000a0a043b0000010005500089000000000a5a022f00000000055a01cf0000000005c5019f00000000005b043500000000057900190000000000050435000000800540003900000000008504350000002005600039000000000151034f000000000101043b000000a005400039000000000015043500000000004304350000062601000041000000400500043d000000000015043500000020010000390000000404500039000000000014043500000000010204330000002402500039000000000012043500000000010304330000004002000039000000440350003900000000002304350000000032010434000005e802200197000000640450003900000000002404350000000002030433000005e9022001970000008403500039000000000023043500000040021000390000000002020433000000000202004b0000000002000019000000010200c039000000a403500039000000000023043500000060021000390000000002020433000000c403500039000000000023043500000080021000390000000002020433000000c003000039000000e4045000390000000000340435000001240350003900000000240204340000000000430435001c00000005001d0000014403500039001d00000004001d000000000404004b000004140000613d0000000004000019000000000534001900000000064200190000000006060433000000000065043500000020044000390000001d0540006c0000040d0000413d0000001d0230002900000000000204350000001c020000290000010402200039000000a00110003900000000010104330000000000120435000006090100004100000000001004390000000001000412000000040010044300000140010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000003000416000000010220019000000e470000613d000000000201043b0000000001000414000005e804200197000000040240008c000010fb0000c13d0000000103000031000000200130008c000000000403001900000020040080390000113a0000013d0000000001000416000000000101004b0000004b0000c13d0000060701000041000000800010043f0000060801000041000017950001042e0000001f04100039001c0020000000920000001c0440017f0000003f044000390000001c0440017f000000400500043d0000000004450019001d00000005001d000000000554004b00000000050000190000000105004039000005e90640009c0000010d0000213d00000001055001900000010d0000c13d000001e003300039000000400040043f0000001d040000290000000004140436001b00000004001d00000200022000390000000004210019000000000334004b0000004b0000213d000000000301004b0000001b06000029000004600000613d000000000300001900000000046300190000000005230019000000000505043300000000005404350000002003300039000000000413004b000004590000413d00000000011600190000000000010435000000400100043d001a00000001001d000005eb0110009c0000010d0000213d0000001a040000290000004001400039000000400010043f00000005010000390000000005140436000005ec0100004100000000001504350000000101000039001800000001001d000000800010043f0000000301000039000000a00010043f000000c00000043f0000001d060000290000000007060433000000200170008c001900000005001d000004f80000413d001700000007001d000005e90170009c0000010d0000213d000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000001b00000c13d001600000003001d000000200130008c000004a20000413d0000000000000435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000201043b00000017010000290000001f011000390000000501100270000000000112001900000016030000290000001f0330003900000005033002700000000002320019000000000321004b000004a20000813d000000000001041b0000000101100039000000000321004b0000049e0000413d0000000000000435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d00000017030000290000001c03300180000000000101043b00000e480000c13d00000020020000390000001d0600002900000e530000013d000000800010043f000000000404004b000004bc0000613d0000000000300435000000000201004b000004ce0000c13d000000a001000039000004d90000013d000001000300008a000000000232016f000000a00020043f000000000101004b000000c001000039000000a001006039000004d90000013d000000ff0210018f000000200320008c000004ee0000413d0000061f010000410000000000170435000005e601000041000005e60270009c00000000070180190000004001700210000005f6011001c70000179600010430000005f30200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000514004b000004d00000413d000000c001300039000000800210008a0000008001000039001e00000001001d179411960000040f0000002001000039000000400200043d001d00000002001d00000000021204360000001e01000029179411830000040f0000001d040000290000000001410049000005e602000041000005e60310009c0000000001028019000005e60340009c000000000402801900000040024002100000006001100210000000000121019f000017950001042e001d00000007001d000005eb0370009c0000010d0000213d0000001d040000290000004003400039000000400030043f000000200340003900000000001304350000000000240435000005580000013d00000003017002100000010001100089000000010200008a00000000011201cf000000000207004b00000000010060190000001b030000290000000002030433000000000112016f000000000171019f000001800010043f0000000004040433000000200140008c000005840000413d001700000004001d000005e90140009c0000010d0000213d0000000104000039000000000104041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000001b00000c13d001500000003001d000000200130008c001600000004001d000005340000413d0000000000400435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000201043b00000017010000290000001f011000390000000501100270000000000112001900000015030000290000001f0330003900000005033002700000000002320019000000000321004b0000001604000029000005340000813d000000000001041b0000000101100039000000000321004b000005300000413d0000000000400435000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005ed011001c700008010020000391794178f0000040f00000001022001900000004b0000613d00000017030000290000001c03300180000000000101043b00000eff0000c13d000000200200003900000f0a0000013d000001000400008a000000000343016f0000000000320435000000000101004b000000200300003900000000030060190000003f01300039000000200200008a000000000221016f001d00000007001d0000000001720019000000000221004b00000000020000190000000102004039000005e90310009c0000010d0000213d00000001022001900000010d0000c13d000000400010043f000006090100004100000000001004390000001e01000029000000040010044300000120010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000400200043d000000000101043b000000ff0310008c000006290000c13d0000000105000039000000000405041a000000010740019000000001014002700000007f0610018f00000000010660190000001f0310008c00000000030000190000000103002039000000000334013f00000001033001900000001d08000029000001b00000c13d0000000003120436000000000707004b001d00000008001d00000dcd0000c13d000001000100008a000000000114016f0000000000130435000000000106004b0000002004000039000000000400601900000dda0000013d00000003014002100000010001100089000000010200008a00000000011201cf000000000204004b00000000010060190000000002050433000000000112016f000000000141019f000001a00010043f000005e604000041000005e60130009c0000000001040019000000000103401900000040011002100000000002060433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001700000001001d000001400010043f0000001902000029000005e60120009c000005e604000041000000000204801900000040012002100000001a020000290000000002020433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001a00000001001d000001600010043f000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000201043b000001000020043f000000400100043d0000008003100039000000000023043500000060021000390000001a030000290000000000320435000000400210003900000017030000290000000000320435000000a002000039001900000002001d0000000002210436000000a0031000390000000004000410001a00000004001d0000000000430435000005f1030000410000000000320435000005f20310009c0000010d0000213d000000c003100039001700000003001d000000400030043f000005e603000041000005e60420009c000000000203801900000040022002100000000001010433000005e60410009c00000000010380190000006001100210000000000121019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000001e020000290000004b0000613d000000000101043b000000e00010043f0000001a03000029000001200030043f000005e80220019800000f640000c13d000005f50100004100000017030000290000000000130435000005e601000041000005e60230009c00000000030180190000004001300210000005f6011001c70000179600010430000005f20440009c0000010d0000213d000000600600003900000000040000190000004005700039000000400050043f000000200570003900000000006504350000000000070435000000a00540003900000000007504350000002004400039000000000524004b000006a50000813d000000400700043d000005eb0570009c000006090000a13d0000010d0000013d000005f20330009c0000010d0000213d000000600500003900000000030000190000004004200039000000400040043f000000200420003900000000005404350000000000020435000000a00430003900000000002404350000002003300039000000000213004b00000ac80000813d000000400200043d000005eb0420009c0000061b0000a13d0000010d0000013d000000ff0310018f000000200430008c000006890000413d0000061f010000410000000000120435000005e601000041000005e60320009c00000000020180190000004001200210000005f6011001c70000179600010430001b00400000003d00000000040000190000063b0000013d00000001044000390000001c0140006c00000000050f0019000000890000813d0000001d0650006a000000440660008a00000000026204360000001e010000290000002001100039001e00000001001d00000000060104330000000076060434000000000865043600000000060704330000001b01000029000000000018043500000040085000390000000007060433000000000078043500000060085000390000000509700210000000000f890019000000000907004b000006370000613d00000000090000190000065e0000013d0000000001bc00190000000000010435000000a001300039000000a00aa00039000000000a0a04330000000000a104350000001f01c00039000000200a00008a0000000001a1016f000000000fb100190000000109900039000000000179004b000006370000813d000000000a5f0049000000600aa0008a0000000008a804360000002006600039000000000a06043300000000cb0a0434000005e80bb00197000000000bbf0436000000000c0c0433000005e90cc001970000000000cb0435000000400ba00039000000000b0b0433000000000b0b004b000000000b000019000000010b00c039000000400cf000390000000000bc0435000000600ba00039000000000b0b0433000000600cf000390000000000bc0435000000800ba00039000000000b0b0433000000800cf00039000000c00d0000390000000000dc0435000000c00ef0003900000000dc0b04340000000000ce043500000000030f0019000000e00bf00039000000000e0c004b000006510000613d000000000e000019000000000fbe00190000000001ed0019000000000101043300000000001f0435000000200ee000390000000001ce004b000006810000413d000006510000013d000005eb0420009c0000010d0000213d0000004004200039000000400040043f000000200420003900000000001404350000000000320435000000400400043d00000de70000013d0000001d070000290000001e02700069000005e605000041000005e60670009c000000000605001900000000060740190000004006600210000005e60720009c00000000020580190000006002200210000000000262019f000005e60610009c0000000001058019000000c001100210000000000121019f000000000203004b00000e670000c13d000000000204001900000e6a0000013d0000000004000019000700000006001d000600000004001d0000000504400210000300000004001d0000000402400029000000000221034f000000020430006a000000c30440008a000000000202043b000000000542004b000005ea0800004100000000050000190000000005088019000005ea04400197000005ea06200197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000705c019000000000407004b0000004b0000c13d00000004062000290000002004600039000000000241034f000000000502043b001a00000006001d00000000026300490000001f0220008a000005ea06200197000005ea07500197000000000867004b000005ea0900004100000000080000190000000008094019000000000667013f000000000725004b00000000070000190000000007098019000005ea0660009c000000000807c019000000000608004b0000004b0000c13d000a001a0050002d0000000a05100360000000000505043b000c00000005001d000005e90550009c0000004b0000213d0000000c050000290005000500500218000000050530006a0000000a060000290000002007600039000000000657004b00000000060000190000000006092019000005ea05500197001800000007001d000005ea07700197000000000857004b00000000080000190000000008094019000000000557013f000005ea0550009c000000000806c019000000000508004b0000004b0000c13d0000000c0500006b000010f60000613d000b00200040003d0000000b04100360000000000404043b000000000524004b000005ea0800004100000000050000190000000005088019000005ea02200197000005ea06400197000000000726004b00000000070000190000000007084019000000000226013f000005ea0220009c000000000705c019000000000207004b0000004b0000c13d0000001a04400029000000000241034f000000000202043b000005e90520009c0000004b0000213d000900600000009200000009652000b900000000033500190000002004400039000000000534004b000005ea0700004100000000050000190000000005072019000005ea03300197000005ea04400197000000000634004b00000000060000190000000006074019000000000334013f000005ea0330009c000000000605c019000000000306004b0000004b0000c13d0000000c0220006b000010f60000c13d0000000b020000290000004002200039000000000121034f000000000101043b000e00000001001d000005e90110009c0000004b0000213d0000000b01000029000800200010003d0000000002000019001c00000002001d0000000501200210000000180310002900000000020000310000000a0120006a000000df0410008a0000000201000367000000000331034f000000000503043b000000000345004b000005ea0800004100000000030000190000000003088019000005ea04400197000005ea06500197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000703c019000000000307004b0000004b0000c13d0000000b031003600000001a0420006a0000001f0440008a000000000303043b000000000643004b000005ea0900004100000000060000190000000006098019000005ea04400197000005ea07300197000000000847004b00000000080000190000000008094019000000000447013f000005ea0440009c000000000806c019000000000408004b0000004b0000c13d0000001a04300029000000000341034f000000000303043b000005e90630009c0000004b0000213d00000009763000b900000000062600190000002004400039000000000764004b000005ea0a000041000000000700001900000000070a2019000005ea06600197000005ea08400197000000000968004b000000000900001900000000090a4019000000000668013f000005ea0660009c000000000907c019000000000609004b0000004b0000c13d0000001c0330006b000010f00000813d0000000803100360000000000303043b000005e80630009c0000004b0000213d000000400600043d001d00000006001d000006120660009c0000010d0000213d00000018075000290000001d06000029000000a005600039000000400050043f0000001a05100360000000000505043b000000000f5604360000000005720049000000c00650008c000005ea0900004100000000060000190000000006094019000005ea05500197000000000805004b00000000080000190000000008092019000005ea0550009c000000000806c019000000000508004b0000004b0000c13d000000400500043d000005f20650009c0000010d0000213d000000c006500039000000400060043f000000000671034f000000000606043b000005e80860009c0000004b0000213d00000000086504360000002006700039000000000961034f000000000909043b000005e90a90009c0000004b0000213d00000000009804350000002006600039000000000861034f000000000808043b000000000908004b0000000009000019000000010900c039000000000998004b0000004b0000c13d000000400950003900000000008904350000002008600039000000000881034f000000000808043b000000600950003900000000008904350000004006600039000000000861034f000000000808043b000005e90980009c0000004b0000213d000000000a7800190000001f07a00039000000000827004b000005ea0c000041000000000800001900000000080c8019000005ea07700197000005ea09200197000000000b97004b000000000b000019000000000b0c4019000000000797013f000005ea0770009c000000000b08c01900000000070b004b0000004b0000c13d0000000007a1034f000000000707043b000005e90870009c0000010d0000213d0000001f08700039000d0020000000920000000d0880017f0000003f088000390000000d0980017f000000400800043d0000000009980019000000000b89004b000000000b000019000000010b004039000005e90c90009c0000010d0000213d000000010bb001900000010d0000c13d000000400090043f0000000009780436000000200aa00039000000000ba70019000000000b2b004b0000004b0000213d000000000aa1034f000000050b700272000007d60000613d000000000c000019000000050dc00210000000000ed90019000000000dda034f000000000d0d043b0000000000de0435000000010cc00039000000000dbc004b000007ce0000413d0000001f0c700190000007e50000613d000000050bb00210000000000aba034f000000000bb90019000000030cc00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000a0a043b000001000cc00089000000000aca022f000000000aca01cf000000000ada019f0000000000ab043500000000077900190000000000070435000000800750003900000000008704350000002006600039000000000661034f000000000606043b000000a00750003900000000006704350000001c0600002900000060766000c900000000046400190000000002420049000000600620008c000005ea0800004100000000060000190000000006084019000005ea02200197000000000702004b00000000070000190000000007082019000005ea0220009c000000000706c01900000000005f0435000000000207004b0000004b0000c13d000000400200043d000006130520009c0000010d0000213d0000006005200039000000400050043f000000000541034f000000000505043b000000ff0650008c0000004b0000213d00000000055204360000002006400039000000000661034f000000000606043b00000000006504350000004004400039000000000141034f000000000101043b000000400420003900000000001404350000001d040000290000006001400039001900000001001d00000000003104350000004003400039000000000023043500000080024000390000000e01000029001700000002001d0000000000120435000000000101004b000008310000613d001600000003001d001b0000000f001d000006140100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e9011001970000000e0110006b0000001b0f000029000000160300002900000fdf0000413d000000000303043300000000010f0433001b00000001001d0000002001300039000f00000001001d00000000010104330000000002030433001000000003001d0000004003300039001100000003001d0000000003030433000000400500043d00000041045000390000000000340435000000f802200210000000200650003900000000002604350000002102500039000000000012043500000041010000390000000000150435000006110150009c0000010d0000213d0000008001500039000000400010043f001500000005001d0000000002050433000000000302004b000008560000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b0000084f0000413d001600000006001d00000000031200190000000404000039001400000004001d0000000000430435000005e60310009c000005e604000041000000000104801900000040011002100000002002200039000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000400200043d000000000101043b000000000101041a000000ff0110019000000fb30000c13d00000015010000290000000001010433000000000301004b000005e6060000410000001607000029000008810000613d000000000300001900000000042300190000000005730019000000000505043300000000005404350000002003300039000000000413004b0000087a0000413d000000000321001900000014040000290000000000430435000005e60320009c000000000206801900000040022002100000002001100039000005e60310009c00000000010680190000006001100210000000000121019f0000000002000414000005e60320009c0000000002068019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000001b05000029000000800150003900000000010104330000002002100039000005e60320009c000005e604000041000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f00000060025000390000000002020433001300000002001d00000040025000390000000002020433001200000002001d00000020025000390000000002020433001400000002001d0000000002050433001500000002001d0000001d020000290000000002020433001600000002001d00000019020000290000000002020433001d00000002001d0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000201043b0000001b01000029000000a001100039000000000301043300000017010000290000000001010433000005e904100197000000400100043d000001400510003900000000004504350000012004100039000000000034043500000100031000390000000000230435000000e00210003900000013030000290000000000320435000000120200006b0000000002000019000000010200c039000000c00310003900000000002304350000001402000029000005e902200197000000a00310003900000000002304350000001502000029000005e802200197000000800310003900000000002304350000006002100039000000160300002900000000003204350000001d02000029000005e8022001970000004003100039000000000023043500000020021000390000061603000041000000000032043500000140030000390000000000310435000006170310009c0000010d0000213d0000016003100039000000400030043f000005e60320009c000005e604000041000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001700000001001d000006090100004100000000001004390000000001000412001b00000001001d0000000400100443000000a001000039001600000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e8011001970000000002000410001500000002001d000000000112004b0000094d0000c13d000006090100004100000000001004390000001b0100002900000004001004430000001e0100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b001d00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d0110006c0000094d0000c13d000006090100004100000000001004390000001b010000290000000400100443000000070100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000009a60000013d000000400100043d001d00000001001d0000002002100039000005f101000041001400000002001d0000000000120435000006090100004100000000001004390000001b010000290000000400100443000000c00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d0200002900000040022000390000000000120435000006090100004100000000001004390000001b010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d0200002900000060022000390000000000120435000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d04000029000000a002400039000000150300002900000000003204350000008002400039000000000012043500000016010000290000000000140435000005f20140009c0000010d0000213d0000001d02000029000000c001200039000000400010043f0000001403000029000005e60130009c000005e604000041000000000304801900000040013002100000000002020433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000400200043d00000022032000390000001704000029000000000043043500000618030000410000000000320435000000020320003900000000001304350000000001000414000005e60310009c000005e6040000410000000001048019000005e60320009c00000000020480190000004002200210000000c001100210000000000112019f00000619011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000110200002900000000020204330000061a0320009c00000fb50000213d000000000101043b000000100300002900000000030304330000000f040000290000000004040433000000400500043d0000006006500039000000000026043500000040025000390000000000420435000000ff0230018f00000020035000390000000000230435000000000015043500000000000004350000000001000414000005e60210009c000005e6030000410000000001038019000005e60250009c00000000050380190000004002500210000000c001100210000000000121019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000503001900000020050080390000000504500272000009ec0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000009e50000413d0000001f05500190000009fa0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000010020000613d0000000001000433000005e80210019800000fca0000613d00000019020000290000000002020433000000000112013f000005e80110019800000fdc0000c13d0000001c0200002900000001022000390000000c0120006c000007210000413d000000400100043d001c00000001001d000005eb0110009c0000010d0000213d0000001c040000290000004001400039000000400010043f00000002010003670000001a03100360000000000303043b0000000002340436001b00000002001d00000005020000290000003f032000390000061003300197000000400200043d0000000003320019001d00000002001d000000000423004b00000000040000190000000104004039000005e90630009c0000010d0000213d00000001044001900000010d0000c13d000000400030043f0000000c020000290000001d030000290000000000230435000000050300002900000018063000290000000003000031000000000436004b0000004b0000213d0000001807000029000000000467004b0000001d0800002900000a500000413d0000001b020000290000001d040000290000000000420435000000800400043d000000060440006c000010f00000a13d0000000302000029000000a0042000390000001c020000290000000000240435000000800200043d000000060220006c000010f00000a13d00000006040000290000000104400039000000010240006c000006a70000413d000010f90000013d00000020088000390000000002bd0019000000000002043500000080029000390000000000c204350000002002a00039000000000221034f000000000202043b000000a004900039000000000024043500000000009804350000002007700039000000000267004b00000a300000813d000000000471034f000000000404043b000005e90940009c0000004b0000213d000000180b4000290000000004b30049000000c00940008c000005ea0200004100000000090000190000000009024019000005ea04400197000000000a04004b000000000a000019000000000a022019000005ea0440009c000000000a09c01900000000040a004b0000004b0000c13d000000400900043d000005f20490009c0000010d0000213d000000c004900039000000400040043f0000000004b1034f000000000404043b000005e80a40009c0000004b0000213d000000000a4904360000002004b00039000000000c41034f000000000c0c043b000005e90dc0009c0000004b0000213d0000000000ca0435000000200a4000390000000004a1034f000000000404043b000000000c04004b000000000c000019000000010c00c039000000000cc4004b0000004b0000c13d000000400c90003900000000004c04350000002004a00039000000000441034f000000000404043b000000600c90003900000000004c0435000000400aa000390000000004a1034f000000000404043b000005e90c40009c0000004b0000213d000000000eb400190000001f04e00039000000000b34004b000000000b000019000000000b028019000005ea04400197000005ea0c300197000000000dc4004b000000000d000019000000000d0240190000000004c4013f000005ea0440009c000000000d0bc01900000000040d004b0000004b0000c13d0000000004e1034f000000000b04043b000005e904b0009c0000010d0000213d0000001f04b000390000000d0440017f0000003f044000390000000d0440017f000000400c00043d00000000044c0019000000000dc4004b000000000d000019000000010d004039000005e90f40009c0000010d0000213d000000010dd001900000010d0000c13d000000400040043f000000000dbc04360000002004e00039000000000e4b0019000000000e3e004b0000004b0000213d000000000e41034f000000050fb0027200000ab80000613d0000000004000019000000050240021000000000052d001900000000022e034f000000000202043b000000000025043500000001044000390000000002f4004b00000ab00000413d0000001f04b0019000000a420000613d0000000502f0021000000000052e034f00000000022d00190000000304400210000000000e020433000000000e4e01cf000000000e4e022f000000000505043b0000010004400089000000000545022f00000000044501cf0000000004e4019f000000000042043500000a420000013d000c00000005001d00000000030000190000000002000031000000080120006a000000c30410008a000b00000003001d0000000503300210000900000003001d0000000a033000290000000201000367000000000331034f000000000303043b000000000543004b000005ea0800004100000000050000190000000005088019000005ea04400197000005ea06300197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000705c019000000000407004b0000004b0000c13d0000000a033000290000000004320049000000a00540008c000005ea0700004100000000050000190000000005074019000005ea04400197000000000604004b00000000060000190000000006072019000005ea0440009c000000000605c019000000000406004b0000004b0000c13d000000400400043d001200000004001d000006120440009c0000010d0000213d0000001205000029000000a004500039000000400040043f000000000431034f000000000404043b00000000044504360000002005300039000000000651034f000000000606043b000005e90760009c0000004b0000213d00000000073600190000001f06700039000000000826004b000005ea0b000041000000000800001900000000080b8019000005ea06600197000005ea09200197000000000a96004b000000000a000019000000000a0b4019000000000696013f000005ea0660009c000000000a08c01900000000060a004b0000004b0000c13d000000000671034f000000000806043b000005e90680009c0000010d0000213d00000005068002100000003f066000390000061009600197000000400600043d0000000009960019000000000a69004b000000000a000019000000010a004039000005e90b90009c0000010d0000213d000000010aa001900000010d0000c13d000000400090043f0000000000860435000000200770003900000006088002100000000008780019000000000928004b0000004b0000213d000000000987004b00000b470000813d0000000009060019000000000a720049000000400ba0008c000005ea0d000041000000000b000019000000000b0d4019000005ea0aa00197000000000c0a004b000000000c000019000000000c0d2019000005ea0aa0009c000000000c0bc019000000000a0c004b0000004b0000c13d000000400a00043d000005eb0ba0009c0000010d0000213d0000002009900039000000400ba000390000004000b0043f000000000b71034f000000000b0b043b000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000a87004b00000b290000413d00000000006404350000002005500039000000000551034f000000000505043b000005e90650009c0000004b0000213d00000000063500190000001f05600039000000000725004b000005ea0a000041000000000700001900000000070a8019000005ea05500197000005ea08200197000000000985004b000000000900001900000000090a4019000000000585013f000005ea0550009c000000000907c019000000000509004b0000004b0000c13d000000000561034f000000000705043b000005e90570009c0000010d0000213d00000005057002100000003f055000390000061008500197000000400500043d0000000008850019000000000958004b00000000090000190000000109004039000005e90a80009c0000010d0000213d00000001099001900000010d0000c13d000000400080043f0000000000750435000000200660003900000060877000c90000000007670019000000000827004b0000004b0000213d000000000876004b00000b9c0000813d00000000080500190000000009620049000000600a90008c000005ea0c000041000000000a000019000000000a0c4019000005ea09900197000000000b09004b000000000b000019000000000b0c2019000005ea0990009c000000000b0ac01900000000090b004b0000004b0000c13d000000400900043d000006130a90009c0000010d0000213d000000600a9000390000004000a0043f000000000a61034f000000000a0a043b000000ff0ba0008c0000004b0000213d0000002008800039000000000aa90436000000200b600039000000000bb1034f000000000b0b043b0000000000ba0435000000400a600039000000000aa1034f000000000a0a043b000000400b9000390000000000ab043500000000009804350000006006600039000000000976004b00000b770000413d00000012020000290000004002200039001000000002001d00000000005204350000006002300039000000000321034f000000000303043b000005e80630009c0000004b0000213d00000012060000290000006006600039000e00000006001d00000000003604350000002002200039000000000121034f000000000101043b000005e90210009c0000004b0000213d00000012020000290000008002200039000f00000002001d000000000012043500000000060404330000000002060433000000000102004b000010f60000613d0000000001050433000000000112004b000010f60000c13d0000000004000019001100000006001d000d00000002001d0000000001060433000000000141004b000010f00000a13d000000100100002900000000030104330000000001030433000000000141004b000010f00000a13d00000012010000290000000001010433001600000004001d00000005024002100000002004200039000000000264001900000000020204330000000f050000290000000005050433000005e907500197000000400500043d001e00000005001d000006120550009c0000010d0000213d000000000343001900000000030304330000000e0400002900000000040404330000001e06000029000000a005600039000000400050043f000005e8044001970000006005600039001c00000005001d00000000004504350000004004600039001d00000004001d00000000003404350000002003600039000000000023043500000000001604350000008001600039001b00000001001d0000000000710435000000000107004b00000bfa0000613d001900000003001d001a00000007001d000006140100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e9011001970000001a0110006b000000190300002900000fdf0000413d0000000001030433001a00000001001d0000000021010434001900000002001d00000000001004350000000301000039000000200010043f0000000001000414000005e60210009c000005e601008041000000c0011002100000061d011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000400500043d000000000101043b000000000101041a000005e80110019800000fe80000613d0000000002000411000000000121004b00000fea0000c13d0000001d0100002900000000030104330000002001300039001300000001001d00000000010104330000000002030433001400000003001d0000004003300039001500000003001d000000000303043300000041045000390000000000340435000000f802200210000000200650003900000000002604350000002102500039000000000012043500000041010000390000000000150435000006110150009c0000010d0000213d0000008001500039000000400010043f001d00000005001d0000000002050433000000000302004b00000c350000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b00000c2e0000413d001800000006001d00000000031200190000000404000039001700000004001d0000000000430435000005e60310009c000005e604000041000000000104801900000040011002100000002002200039000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000400200043d000000000101043b000000000101041a000000ff0110019000000fb30000c13d0000001d010000290000000001010433000000000301004b000005e606000041000000180700002900000c600000613d000000000300001900000000042300190000000005730019000000000505043300000000005404350000002003300039000000000413004b00000c590000413d000000000321001900000017040000290000000000430435000005e60320009c000000000206801900000040022002100000002001100039000005e60310009c00000000010680190000006001100210000000000121019f0000000002000414000005e60320009c0000000002068019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000001c0100002900000000020104330000001e0100002900000000030104330000001a010000290000000004010433000000190100002900000000050104330000001b010000290000000001010433000005e906100197000000400100043d000000c0071000390000000000670435000000a00610003900000000005604350000008005100039000000000045043500000060041000390000000000340435000005e80220019700000040031000390000000000230435000000c002000039001a00000002001d0000000002210436000006070300004100000000003204350000062b0310009c0000010d0000213d000000e003100039000000400030043f000005e60320009c000005e604000041000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b001b00000001001d000006090100004100000000001004390000000001000412001d00000001001d0000000400100443000000a001000039001900000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b000005e8011001970000000002000410001800000002001d000000000112004b00000cf60000c13d000006090100004100000000001004390000001d010000290000000400100443000000800100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b001e00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e0110006c00000cf60000c13d000006090100004100000000001004390000001d0100002900000004001004430000000c0100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d00000d4f0000013d000000400100043d001e00000001001d0000002002100039000005f101000041001700000002001d0000000000120435000006090100004100000000001004390000001d0100002900000004001004430000001a0100002900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e0200002900000040022000390000000000120435000006090100004100000000001004390000001d010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e0200002900000060022000390000000000120435000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001e04000029000000a002400039000000180300002900000000003204350000008002400039000000000012043500000019010000290000000000140435000005f20140009c0000010d0000213d0000001e02000029000000c001200039000000400010043f0000001703000029000005e60130009c000005e604000041000000000304801900000040013002100000000002020433000005e60320009c00000000020480190000006002200210000000000112019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000000101043b000000400200043d00000022032000390000001b04000029000000000043043500000618030000410000000000320435000000020320003900000000001304350000000001000414000005e60310009c000005e6040000410000000001048019000005e60320009c00000000020480190000004002200210000000c001100210000000000112019f00000619011001c700008010020000391794178f0000040f00000001022001900000004b0000613d000000150200002900000000020204330000061a0320009c00000fb50000213d000000000101043b0000001403000029000000000303043300000013040000290000000004040433000000400500043d0000006006500039000000000026043500000040025000390000000000420435000000ff0230018f00000020035000390000000000230435000000000015043500000000000004350000000001000414000005e60210009c000005e6030000410000000001038019000005e60250009c00000000050380190000004002500210000000c001100210000000000121019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c00000000050300190000002005008039000000050450027200000d950000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000d8e0000413d0000001f0550019000000da30000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f0003000000010355000000010220019000000ff20000613d0000000001000433000005e8021001980000001106000029000000160400002900000fca0000613d0000001c020000290000000002020433000000000112013f000005e80110019800000fdc0000c13d00000001044000390000000d0140006c00000bbc0000413d000000400100043d000005eb0210009c0000010d0000213d000000120200002900000000020204330000004003100039000000400030043f0000002003100039000000110400002900000000004304350000000000210435000000800200043d0000000b0220006c000010f00000a13d0000000902000029000000a0022000390000000000120435000000800100043d0000000b0110006c000010f00000a13d0000000b030000290000000103300039000000070130006c00000aca0000413d0000014a0000013d0000000000500435000000020440008c000000000400001900000dda0000413d000006210500004100000000040000190000000006430019000000000705041a000000000076043500000001055000390000002004400039000000000614004b00000dd30000413d0000003f01400039000000200300008a000000000131016f0000000003210019000000000113004b000000000100001900000001010040390000000004030019000005e90330009c0000010d0000213d00000001011001900000010d0000c13d000000400040043f001e00000004001d000006220140009c0000010d0000213d0000001e030000290000002001300039001900000001001d000000400010043f0000000000030435000000400800043d0000002001800039000000e003000039000000000031043500000623010000410000000000180435000000e0018000390000001d03000029000000004303043400000000003104350000010001800039000000000503004b00000e040000613d000000000500001900000000061500190000000007540019000000000707043300000000007604350000002005500039000000000635004b00000dfd0000413d000000000413001900000000000404350000001f03300039001c0020000000920000001c0330017f00000000031300190000000001830049001d00000008001d0000004004800039000000000014043500000000160204340000000005630436000000000206004b00000e1a0000613d000000000200001900000000035200190000000004210019000000000404043300000000004304350000002002200039000000000362004b00000e130000413d001b00000005001d001a00000006001d00000000015600190000000000010435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f000000010220019000000e470000613d000000000101043b0000001d04000029000000800240003900000000030004100000000000320435000000600240003900000000001204350000001a010000290000001f011000390000001c0110017f0000001b011000290000000002410049000000c0034000390000000000230435000000a00240003900000000000204350000001e0200002900000000020204330000000001210436000000000302004b000004e30000613d00000000030000190000001905000029000000005405043400000000014104360000000103300039000000000423004b00000e410000413d000004e30000013d000000000001042f000000200200003900000000040000190000001d0600002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00000e4b0000413d0000001705000029000000000353004b00000e5f0000813d0000000303500210000000f80330018f000000010400008a000000000334022f000000000343013f00000000026200190000000002020433000000000232016f000000000021041b000000010150021000000001011001bf000000000010041b000000ff010000390000001b030000290000001a040000290000001905000029000005020000013d000005ee011001c7000080090200003900000000050000191794178a0000040f000300000001035500000000030100190000006003300270000105e60030019d000005e603300197000000010220019000000eef0000613d0000001f0230018f00000005043002720000001d0800002900000e7f0000613d000000000500001900000005065002100000000007680019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e770000413d000000000502004b00000e8e0000613d0000000504400210000000000141034f00000000044800190000000302200210000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000001f01300039000000200200008a000000000121016f0000000002810019000000000112004b00000000010000190000000101004039001900000002001d000005e90220009c0000010d0000213d00000001011001900000010d0000c13d000005ea01000041000000200230008c00000000020000190000000002014019000005ea04300197000000000504004b000000000100a019000005ea0440009c000000000102c0190000001902000029000000400020043f000000000101004b0000004b0000c13d0000001d010000290000000001010433000005e90210009c0000004b0000213d0000001d023000290000001d011000290000001f03100039000005ea04000041000000000523004b00000000050000190000000005048019000005ea03300197000005ea06200197000000000763004b0000000004008019000000000363013f000005ea0330009c000000000405c019000000000304004b0000004b0000c13d0000000013010434000005e90430009c0000010d0000213d00000005043002100000003f0540003900000610055001970000001905500029000005e90650009c0000010d0000213d000000400050043f00000019050000290000000003350436001800000003001d0000000003140019000000000223004b0000004b0000213d000000000231004b00000ed20000813d000000180200002900000000140104340000000002420436000000000431004b00000ece0000413d000000010100006b000000190a0000290000107a0000c13d000000400100043d0000001602000029000000000221043600000000030a043300000000003204350000004002100039000000000403004b00000ee50000613d000000000400001900000019060000290000002006600039000000000506043300000000025204360000000104400039000000000534004b00000edf0000413d0000000002120049000005e603000041000005e60420009c0000000002038019000005e60410009c000000000103801900000040011002100000006002200210000000000112019f000017950001042e000000400200043d0000001f0430018f000000050530027200000efc0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000ef40000413d000000000604004b0000101e0000613d000010110000013d000000200200003900000000040000190000001a0600002900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b00000f020000413d0000001705000029000000000353004b00000f160000813d0000000303500210000000f80330018f000000010400008a000000000334022f000000000343013f0000001a022000290000000002020433000000000232016f000000000021041b000000010150021000000001011001bf0000001602000029000000000012041b000000ff010000390000001d060000290000001b030000290000058d0000013d0000008004000039000000400500003900000000060000190000001d0c00002900000f260000013d0000000106600039000000000726004b0000017b0000813d0000000007c10049000000440770008a00000000037304360000002004400039000000000704043300000000870704340000000009710436000000000708043300000000005904350000004009100039000000000807043300000000008904350000006001100039000000000908004b00000f230000613d00000000090000190000002007700039000000000a07043300000000ba0a0434000000000aa10436000000000b0b04330000000000ba043500000040011000390000000109900039000000000a89004b00000f360000413d00000f230000013d000005ee011001c700008009020000390000001e0400002900000000050000191794178a0000040f000300000001035500000000030100190000006003300270000105e60030019d000005e603300197000000010220019000000f540000613d0000001d01000029000005e90110009c0000010d0000213d0000001d01000029000000400010043f0000000001000019000017950001042e000000400200043d0000001f0430018f000000050530027200000f610000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000f590000413d000000000604004b0000101e0000613d000010110000013d0000001e02000029000001c00020043f0000001d020000290000000003020433000005e90230009c0000010d0000213d0000000202000039000000000502041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f0000000105500190000001b00000c13d000000200540008c00000f880000413d0000001f053000390000000505500270000005f306500041000005f305000041000000200730008c000000000506801900000000002004350000001f044000390000000504400270000005f304400041000000000645004b00000f880000813d000000000005041b0000000105500039000000000645004b00000f840000413d0000001f0430008c000010250000a13d00000000002004350000001c06300180000010310000c13d0000002005000039000005f3040000410000103d0000013d0000060e011001c700008009020000390000001c0400002900000000050000191794178a0000040f000300000001035500000000030100190000006003300270000105e60030019d000005e603300197000000010220019000000fa30000613d0000001e01000029000005e90110009c0000010d0000213d0000001e01000029000000400010043f0000000001000019000017950001042e000000400200043d0000001f0430018f000000050530027200000fb00000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000fa80000413d000000000604004b0000101e0000613d000010110000013d00000615010000410000062d0000013d000000400100043d00000064021000390000062f0300004100000000003204350000004402100039000006300300004100000000003204350000002402100039000000220300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c0000000001028019000000400110021000000631011001c70000179600010430000000400100043d00000044021000390000062d0300004100000000003204350000002402100039000000180300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c000000000102801900000040011002100000060f011001c70000179600010430000000400100043d0000062c0200004100000fe10000013d000000400100043d00000629020000410000000000210435000005e602000041000005e60310009c00000000010280190000004001100210000005f6011001c70000179600010430000006320100004100000feb0000013d0000062a010000410000000000150435000005e601000041000005e60250009c00000000050180190000004001500210000005f6011001c70000179600010430000000400200043d0000001f0430018f000000050530027200000fff0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000ff70000413d000000000604004b000010110000c13d0000101e0000013d000000400200043d0000001f0430018f00000005053002720000100f0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010070000413d000000000604004b0000101e0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000005e601000041000005e60420009c000000000201801900000040012002100000006002300210000000000121019f0000179600010430000000000403004b00000000040000190000102a0000613d0000001b0400002900000000040404330000000305300210000000010600008a000000000556022f000000000565013f000000000454016f0018000100300218000010490000013d000005f304000041000000200500003900000000070000190000001d0900002900000000089500190000000008080433000000000084041b000000200550003900000001044000390000002007700039000000000867004b000010350000413d000000000636004b000010480000813d0000000306300210000000f80660018f000000010700008a000000000667022f000000000676013f0000001d055000290000000005050433000000000565016f000000000054041b000000010430021000000018034001af000000000032041b000000800200043d00000140000004430000016000200443000000a00300043d00000020020000390000018000200443000001a0003004430000004003000039000000c00400043d000001c000300443000001e0004004430000006003000039000002000030044300000220001004430000008001000039000001000300043d00000240001004430000026000300443000000190100002900000280001004430000001a01000029000002a000100443000000c001000039000001400300043d000002c000100443000002e000300443000000e001000039000001600300043d000003000010044300000320003004430000010001000039000001800300043d000003400010044300000360003004430000012001000039000001a00300043d0000038000100443000003a0003004430000014001000039000003c0001004430000001e01000029000003e00010044300000100002004430000000b010000390000012000100443000005f401000041000017950001042e0000000002000019000000000c000019000010810000013d00000017020000290000000102200039000000010120006c00000ed50000813d001700000002001d000000050120021000000004021000290000000001000031000000020310006a000000c30430008a0000000203000367000000000223034f000000000202043b000000000542004b000005ea0800004100000000050000190000000005088019000005ea04400197000005ea06200197000000000746004b00000000070000190000000007084019000000000446013f000005ea0440009c000000000705c019000000000407004b0000004b0000c13d000000040420002900000000024100490000001f0620008a0000002002400039000000000523034f000000000505043b000000000765004b000005ea0b000041000000000700001900000000070b8019000005ea06600197000005ea08500197000000000968004b000000000900001900000000090b4019000000000668013f000005ea0660009c000000000907c019000000000609004b0000004b0000c13d0000000004450019000000000343034f000000000303043b001b00000003001d000005e90330009c0000004b0000213d0000001b03000029000000050330021000000000013100490000002003400039000000000413004b000005ea0600004100000000040000190000000004062019000005ea01100197000005ea03300197000000000513004b00000000050000190000000005064019000000000113013f000005ea0110009c000000000504c019000000000105004b0000004b0000c13d0000001b0100006b0000107d0000613d001a00400020003d00000000030000190000001a010000290000000201100367000000000201043b000005e80120009c0000004b0000213d001d00000002001d001e00000003001d00000000010a04330000000001c1004b000010f00000a13d0000000501c002100000001801100029000000000101043300000000001004350000000301000039000000200010043f0000000001000414000005e60210009c000005e601008041000000c0011002100000061d011001c70000801002000039001c0000000c001d1794178f0000040f0000001c0c0000290000000102200190000000190a0000290000001e030000290000001d040000290000004b0000613d000000000101043b000000000201041a0000061e02200197000000000242019f000000000021041b000000010cc0003900000001033000390000001b0130006c000010c80000413d0000107d0000013d000006270100004100000000001004350000003201000039000000040010043f00000628010000410000179600010430000000400100043d000006330200004100000fe10000013d000000400700043d000000780000013d0000001d020000290000001f022000390000001b0220017f0000014402200039000005e6050000410000001c07000029000005e60670009c000000000605001900000000060740190000004006600210000005e60720009c00000000020580190000006002200210000000000262019f000005e60610009c0000000001058019000000c001100210000000000121019f000000000203004b000011110000c13d0000000002040019000011140000013d000005ee011001c7000080090200003900000000050000191794178a0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000011270000613d000000000700001900000005087002100000001c09800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000111f0000413d000000000705004b000011360000613d0000000506600210000000000761034f0000001c066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000011660000613d0000001f01400039000000600110018f0000001c02100029000000000112004b00000000010000190000000101004039001d00000002001d000005e90220009c0000010d0000213d00000001011001900000010d0000c13d0000001d01000029000000400010043f000000200130008c0000004b0000413d0000001e01000029000000a4011000390000000201100367000000000101043b001e00000001001d000005e80110009c0000004b0000213d0000001c010000290000000001010433001c00000001001d00000000001004350000000301000039000000200010043f00000040020000390000000001000019179417550000040f000000000201041a0000061e022001970000001e022001af000000000021041b0000001d030000290000001c010000290000000000130435000005e601000041000005e60230009c0000000003018019000000400130021000000606011001c7000017950001042e000000400200043d0000001f0430018f0000000505300272000011730000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000116b0000413d000000000604004b0000101e0000613d000010110000013d000000000403004b000011800000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000011790000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000203004b0000118f0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000532004b000011880000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000005e90310009c000011a30000213d0000000102200190000011a30000c13d000000400010043f000000000001042d000006270100004100000000001004350000004101000039000000040010043f00000628010000410000179600010430000006350210009c000011ae0000413d0000004003000039000006354210012a000011b80000013d000006363210012a000006370310009c000000000201a019000006370310009c00000000030000190000002003002039000006380420009c00000010033081bf0000063902208197000006384220812a0000063a0420009c0000000803308039000005e9022081970000063a4220812a000027100420008c0000000403308039000005e602208197000027104220811a000000640420008c00000002033080390000ffff0220818f000000644220811a000000090220008c0000000103302039000000200200008a000000000523016f0000005f04500039000000000624016f000000400200043d0000000004260019000000000664004b00000000060000190000000106004039000005e90740009c000011f60000213d0000000106600190000011f60000c13d000000400040043f0000000104300039000000000442043600000020065000390000001f0560018f0000000506600272000011e50000613d0000000007000031000000020770036700000000080000190000000509800210000000000a940019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000011dd0000413d000000000405004b000011e70000613d00000000033200190000002103300039000000090510008c0000000a5110011a00000003055002100000063b0550021f0000063c05500197000000010330008a00000000060304330000063d06600197000000000556019f0000000000530435000011e90000213d0000000001020019000000000001042d000006270100004100000000001004350000004101000039000000040010043f000006280100004100001796000104300005000000000002000006090100004100000000001004390000000001000412000400000001001d0000000400100443000000a001000039000300000001001d0000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000005e8011001970000000002000410000200000002001d000000000112004b000012470000c13d000006090100004100000000001004390000000401000029000000040010044300000080010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000500000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000000050110006c000012470000c13d000006090100004100000000001004390000000401000029000000040010044300000060010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000000000001042d000000400100043d000500000001001d0000002002100039000005f101000041000100000002001d00000000001204350000060901000041000000000010043900000004010000290000000400100443000000c0010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b0000000502000029000000400220003900000000001204350000060901000041000000000010043900000004010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000012a40000613d000000000101043b000000050200002900000060022000390000000000120435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000012a40000613d000000000101043b0000000504000029000000a0024000390000000203000029000000000032043500000080024000390000000000120435000000030100002900000000001404350000063e0140009c000012a50000813d0000000503000029000000c001300039000000400010043f000005e6010000410000000104000029000005e60240009c000000000401801900000040024002100000000003030433000005e60430009c00000000030180190000006003300210000000000223019f0000000003000414000005e60430009c0000000003018019000000c001300210000000000121019f000005ee011001c700008010020000391794178f0000040f0000000102200190000012ab0000613d000000000101043b000000000001042d000000000001042f000006270100004100000000001004350000004101000039000000040010043f0000062801000041000017960001043000000000010000190000179600010430000d000000000002000d00000001001d0000008001100039000a00000001001d0000000001010433000005e901100198000012c50000613d000c00000001001d00000614010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000014a70000613d000000000101043b000005e9011001970000000c0110006b000015020000413d0000000d020000290000004001200039000000000301043300000020012000390000000001010433000c00000001001d0000002001300039000300000001001d00000000010104330000000002030433000400000003001d0000004003300039000500000003001d0000000003030433000000400500043d00000041045000390000000000340435000000f80220021000000020065000390000000000260435000000210250003900000000001204350000004101000039000100000001001d00000000001504350000063f0150009c000014a80000813d0000008001500039000000400010043f000b00000005001d0000000002050433000000000302004b000012ee0000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b000012e70000413d000900000006001d00000000031200190000000404000039000800000004001d0000000000430435000005e603000041000005e60410009c000000000103801900000040011002100000002002200039000005e60420009c00000000020380190000006002200210000000000112019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000400200043d000000000101043b000000000101041a000000ff011001900000000b01000029000014ae0000c13d0000000001010433000000000301004b0000000906000029000013180000613d000000000300001900000000042300190000000005630019000000000505043300000000005404350000002003300039000000000413004b000013110000413d000000000321001900000008040000290000000000430435000005e604000041000005e60320009c000000000204801900000040022002100000002001100039000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000000c04000029000000800140003900000000010104330000002002100039000005e60320009c000005e605000041000000000205801900000040022002100000000001010433000005e60310009c00000000010580190000006001100210000000000121019f00000060024000390000000002020433000700000002001d00000040024000390000000002020433000600000002001d00000020024000390000000002020433000800000002001d0000000002040433000900000002001d0000000d020000290000000003020433000b00000003001d0000006002200039000200000002001d0000000002020433000d00000002001d0000000002000414000005e60320009c0000000002058019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000201043b0000000c01000029000000a00110003900000000030104330000000a010000290000000001010433000005e904100197000000400100043d000001400510003900000000004504350000012004100039000000000034043500000100031000390000000000230435000000e00210003900000007030000290000000000320435000000060200006b0000000002000019000000010200c039000000c00310003900000000002304350000000802000029000005e902200197000000a00310003900000000002304350000000902000029000005e8022001970000008003100039000000000023043500000060021000390000000b0300002900000000003204350000000d02000029000005e8022001970000004003100039000000000023043500000020021000390000061603000041000000000032043500000140030000390000000000310435000006170310009c000014a80000213d0000016003100039000000400030043f000005e604000041000005e60320009c000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000101043b000b00000001001d000006090100004100000000001004390000000001000412000c00000001001d0000000400100443000000a001000039000a00000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b000005e8011001970000000002000410000900000002001d000000000112004b000013e80000c13d000006090100004100000000001004390000000c01000029000000040010044300000080010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b000d00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d0110006c000013e80000c13d000006090100004100000000001004390000000c01000029000000040010044300000060010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000014430000013d000000400100043d000d00000001001d0000002002100039000005f101000041000800000002001d0000000000120435000006090100004100000000001004390000000c010000290000000400100443000000c0010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d0200002900000040022000390000000000120435000006090100004100000000001004390000000c010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d0200002900000060022000390000000000120435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000014a70000613d000000000101043b0000000d04000029000000a00240003900000009030000290000000000320435000000800240003900000000001204350000000a010000290000000000140435000005f20140009c000014a80000213d0000000d03000029000000c001300039000000400010043f000005e6010000410000000804000029000005e60240009c000000000401801900000040024002100000000003030433000005e60430009c00000000030180190000006003300210000000000223019f0000000003000414000005e60430009c0000000003018019000000c001300210000000000121019f000005ee011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000000101043b000000400200043d00000022032000390000000b0400002900000000004304350000061803000041000000000032043500000002032000390000000000130435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000121019f00000619011001c700008010020000391794178f0000040f0000000102200190000014a50000613d000000400200043d000000050300002900000000030304330000061a0430009c000014b60000213d000000000101043b00000004040000290000000004040433000000030500002900000000050504330000006006200039000000000036043500000040032000390000000000530435000000ff0340018f0000002004200039000000000034043500000000001204350000000000000435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000112019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000403001900000020040080390000001f0540018f00000005044002720000148a0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000014830000413d000000000605004b000014980000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000014ca0000613d0000000001000433000005e802100198000014ed0000613d00000002020000290000000002020433000000000112013f000005e801100198000014ff0000c13d000000000001042d00000000010000190000179600010430000000000001042f000006270100004100000000001004350000000101000029000000040010043f0000062801000041000017960001043000000615010000410000000000120435000005e601000041000005e60320009c00000000020180190000004001200210000005f6011001c7000017960001043000000064012000390000062f0300004100000000003104350000004401200039000006300300004100000000003104350000002401200039000000220300003900000000003104350000062e010000410000000000120435000000040120003900000020030000390000000000310435000005e601000041000005e60320009c0000000002018019000000400120021000000631011001c70000179600010430000000400200043d0000001f0430018f0000000505300272000014d70000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000014cf0000413d000000000604004b000014e60000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000005e601000041000005e60420009c000000000201801900000040012002100000006002300210000000000121019f0000179600010430000000400100043d00000044021000390000062d0300004100000000003204350000002402100039000000180300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c000000000102801900000040011002100000060f011001c70000179600010430000000400100043d0000062c02000041000015040000013d000000400100043d00000629020000410000000000210435000005e602000041000005e60310009c00000000010280190000004001100210000005f6011001c70000179600010430000c000000000002000c00000001001d0000008001100039000b00000001001d0000000001010433000005e901100198000015230000613d000a00000001001d00000614010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000016e60000613d000000000101043b000005e9011001970000000a0110006b0000174b0000413d0000000c0100002900000020011000390000000001010433000a00000001001d0000000021010434000900000002001d00000000001004350000000301000039000000200010043f000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000061d011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000400500043d000000000101043b000000000101041a000005e801100198000016ed0000613d0000000002000411000000000121004b000016ef0000c13d0000000c01000029000000400110003900000000030104330000002001300039000300000001001d00000000010104330000000002030433000400000003001d0000004003300039000500000003001d000000000303043300000041045000390000000000340435000000f80220021000000020065000390000000000260435000000210250003900000000001204350000004101000039000100000001001d00000000001504350000063f0150009c000016e70000813d0000008001500039000000400010043f000800000005001d0000000002050433000000000302004b000015630000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000423004b0000155c0000413d000700000006001d00000000031200190000000404000039000600000004001d0000000000430435000005e603000041000005e60410009c000000000103801900000040011002100000002002200039000005e60420009c00000000020380190000006002200210000000000112019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000400200043d000000000101043b000000000101041a000000ff011001900000000801000029000016f70000c13d0000000001010433000000000301004b00000007060000290000158d0000613d000000000300001900000000042300190000000005630019000000000505043300000000005404350000002003300039000000000413004b000015860000413d000000000321001900000006040000290000000000430435000005e603000041000005e60420009c000000000203801900000040022002100000002001100039000005e60410009c00000000010380190000006001100210000000000121019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b0000000a010000290000000002010433000000090100002900000000030104330000000b010000290000000001010433000005e9041001970000000c0100002900000000050104330000006001100039000900000001001d0000000006010433000000400100043d000000c0071000390000000000470435000000a00410003900000000003404350000008003100039000000000023043500000060021000390000000000520435000005e80260019700000040031000390000000000230435000000c002000039000800000002001d0000000002210436000006070300004100000000003204350000062b0310009c000016e70000213d000000e003100039000000400030043f000005e604000041000005e60320009c000000000204801900000040022002100000000001010433000005e60310009c00000000010480190000006001100210000000000121019f0000000002000414000005e60320009c0000000002048019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000000101043b000a00000001001d000006090100004100000000001004390000000001000412000b00000001001d0000000400100443000000a001000039000700000001001d00000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b000005e8011001970000000002000410000600000002001d000000000112004b000016270000c13d000006090100004100000000001004390000000b01000029000000040010044300000080010000390000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b000c00000001001d000005ef0100004100000000001004390000000001000414000005e60210009c000005e601008041000000c001100210000005f0011001c70000800b020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c0110006c000016270000c13d000006090100004100000000001004390000000b01000029000000040010044300000060010000390000002400100443000005e6010000410000000002000414000005e60320009c0000000002018019000000c0012002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000016820000013d000000400100043d000c00000001001d0000002002100039000005f101000041000200000002001d0000000000120435000006090100004100000000001004390000000b01000029000000040010044300000008010000290000002400100443000005e6030000410000000001000414000005e60210009c0000000001038019000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c0200002900000040022000390000000000120435000006090100004100000000001004390000000b010000290000000400100443000000e00100003900000024001004430000000001000414000005e60210009c000005e601008041000000c0011002100000060a011001c700008005020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c0200002900000060022000390000000000120435000005ef010000410000000000100439000005e6010000410000000002000414000005e60320009c0000000002018019000000c001200210000005f0011001c70000800b020000391794178f0000040f0000000102200190000016e60000613d000000000101043b0000000c04000029000000a002400039000000060300002900000000003204350000008002400039000000000012043500000007010000290000000000140435000005f20140009c000016e70000213d0000000c03000029000000c001300039000000400010043f000005e6010000410000000204000029000005e60240009c000000000401801900000040024002100000000003030433000005e60430009c00000000030180190000006003300210000000000223019f0000000003000414000005e60430009c0000000003018019000000c001300210000000000121019f000005ee011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000000101043b000000400200043d00000022032000390000000a0400002900000000004304350000061803000041000000000032043500000002032000390000000000130435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000121019f00000619011001c700008010020000391794178f0000040f0000000102200190000016e40000613d000000400200043d000000050300002900000000030304330000061a0430009c000016ff0000213d000000000101043b00000004040000290000000004040433000000030500002900000000050504330000006006200039000000000036043500000040032000390000000000530435000000ff0340018f0000002004200039000000000034043500000000001204350000000000000435000005e6010000410000000003000414000005e60430009c0000000003018019000005e60420009c00000000020180190000004001200210000000c002300210000000000112019f0000061b011001c700000001020000391794178f0000040f00000000030100190000006003300270000005e603300197000000200430008c000000000403001900000020040080390000001f0540018f0000000504400272000016c90000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000016c20000413d000000000605004b000016d70000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000017130000613d0000000001000433000005e802100198000017360000613d00000009020000290000000002020433000000000112013f000005e801100198000017480000c13d000000000001042d00000000010000190000179600010430000000000001042f000006270100004100000000001004350000000101000029000000040010043f000006280100004100001796000104300000063201000041000016f00000013d0000062a010000410000000000150435000005e601000041000005e60250009c00000000050180190000004001500210000005f6011001c7000017960001043000000615010000410000000000120435000005e601000041000005e60320009c00000000020180190000004001200210000005f6011001c7000017960001043000000064012000390000062f0300004100000000003104350000004401200039000006300300004100000000003104350000002401200039000000220300003900000000003104350000062e010000410000000000120435000000040120003900000020030000390000000000310435000005e601000041000005e60320009c0000000002018019000000400120021000000631011001c70000179600010430000000400200043d0000001f0430018f0000000505300272000017200000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000017180000413d000000000604004b0000172f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000005e601000041000005e60420009c000000000201801900000040012002100000006002300210000000000121019f0000179600010430000000400100043d00000044021000390000062d0300004100000000003204350000002402100039000000180300003900000000003204350000062e020000410000000000210435000000040210003900000020030000390000000000320435000005e602000041000005e60310009c000000000102801900000040011002100000060f011001c70000179600010430000000400100043d0000062c020000410000174d0000013d000000400100043d00000629020000410000000000210435000005e602000041000005e60310009c00000000010280190000004001100210000005f6011001c70000179600010430000000000001042f000005e603000041000005e60410009c00000000010380190000004001100210000005e60420009c00000000020380190000006002200210000000000112019f0000000002000414000005e60420009c0000000002038019000000c002200210000000000112019f000005ee011001c700008010020000391794178f0000040f0000000102200190000017690000613d000000000101043b000000000001042d0000000001000019000017960001043000000000050100190000000000200439000000050130008c000017790000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000631004b000017710000413d000005e6010000410000000002000414000005e60420009c0000000002018019000005e60430009c00000000030180190000006001300210000000c002200210000000000112019f00000640011001c700000000020500191794178f0000040f0000000102200190000017890000613d000000000101043b000000000001042d000000000001042f0000178d002104210000000102000039000000000001042d0000000002000019000000000001042d00001792002104230000000102000039000000000001042d0000000002000019000000000001042d0000179400000432000017950001042e0000179600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf312e332e30000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000008b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000ffffffffffffff3f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace000000020000000000000000000000000000030000000100000000000000000083780ffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000065c40b9b00000000000000000000000000000000000000000000000000000000a6d4dbc600000000000000000000000000000000000000000000000000000000a6d4dbc700000000000000000000000000000000000000000000000000000000b83010d300000000000000000000000000000000000000000000000000000000ed24911d0000000000000000000000000000000000000000000000000000000065c40b9c0000000000000000000000000000000000000000000000000000000084b0196e00000000000000000000000000000000000000000000000000000000954115250000000000000000000000000000000000000000000000000000000017d7de7b0000000000000000000000000000000000000000000000000000000017d7de7c000000000000000000000000000000000000000000000000000000003c0427150000000000000000000000000000000000000000000000000000000054fd4d50000000000000000000000000000000000000000000000000000000000eabf6600000000000000000000000000000000000000000000000000000000010d736d50000000000000000000000000000000000000000000000000000000012b11a17000000000000000000000000000000000000002000000000000000000000000078a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d0000000000000000000000000000000000000020000000800000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000004692626700000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9f796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132cce9a82400000000000000000000000000000000000000000000000000000000ea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1000000000000000000000000000000000000000000000000fffffffffffffe9f190100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000420000000000000000000000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0000000000000000000000000000000000000008000000000000000000000000044adc90e000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000b3512b0c00000000000000000000000000000000000000000000000000000000290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000000000000000000000000000ffffffffffffffdf0f000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe1ff17325e7000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001ab7da6b000000000000000000000000000000000000000000000000000000004ca8886700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f8baa579f0000000000000000000000000000000000000000000000000000000045434453413a20696e76616c6964207369676e6174757265000000000000000008c379a000000000000000000000000000000000000000000000000000000000756500000000000000000000000000000000000000000000000000000000000045434453413a20696e76616c6964207369676e6174757265202773272076616c0000000000000000000000000000000000000084000000000000000000000000c5723b5100000000000000000000000000000000000000000000000000000000947d5a84000000000000000000000000000000000000000000000000000000004cb7e9e5000000000000000000000000000000000000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff8002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a03ce84924ed27808e4ca2800f02e2c07e01850ec4a20f399d9b7e1f4ce5d419\";\n\ntype EIP712ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: EIP712ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class EIP712Proxy__factory extends ContractFactory {\n  constructor(...args: EIP712ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(eas, name, overrides || {});\n  }\n  override deploy(\n    eas: AddressLike,\n    name: string,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(eas, name, overrides || {}) as Promise<\n      EIP712Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): EIP712Proxy__factory {\n    return super.connect(runner) as EIP712Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): EIP712ProxyInterface {\n    return new Interface(_abi) as EIP712ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EIP712Proxy {\n    return new Contract(address, _abi, runner) as unknown as EIP712Proxy;\n  }\n}\n"
  },
  {
    "path": "eslint.config.mjs",
    "content": "import prettier from 'eslint-config-prettier';\nimport chaiFriendly from 'eslint-plugin-chai-friendly';\nimport tseslint from 'typescript-eslint';\n\nexport default [\n  ...tseslint.configs.recommended,\n  prettier,\n  chaiFriendly.configs.recommendedFlat,\n  {\n    files: ['**/*.ts'],\n    rules: {\n      'max-len': ['error', 150, 2],\n      camelcase: [\n        'error',\n        {\n          ignoreImports: true\n        }\n      ],\n      indent: [\n        'error',\n        2,\n        {\n          SwitchCase: 1\n        }\n      ],\n      semi: ['error', 'always'],\n      quotes: ['error', 'single', { avoidEscape: true }],\n      'no-plusplus': 'off',\n      'no-await-in-loop': 'off',\n      'no-restricted-syntax': 'off',\n      'no-continue': 'off',\n      'arrow-body-style': 'off',\n      'no-loop-func': 'off',\n      'no-unused-expressions': 'off',\n      'chai-friendly/no-unused-expressions': 'error',\n      'require-await': 'error',\n      'no-return-await': 'error',\n      '@typescript-eslint/explicit-module-boundary-types': 'off',\n      '@typescript-eslint/no-explicit-any': 'off',\n      '@typescript-eslint/no-non-null-assertion': 'off',\n      '@typescript-eslint/no-unused-expressions': 'off'\n    },\n    languageOptions: {\n      globals: {\n        assert: true,\n        expect: true,\n        artifacts: true,\n        contract: true\n      }\n    }\n  }\n];\n"
  },
  {
    "path": "foundry.toml",
    "content": "[profile.default]\nsolc = \"0.8.28\"\nbytecode_hash = \"none\"\noptimizer = true\noptimizer_runs = 1000000\nremappings = [\"@openzeppelin/contracts=node_modules/@openzeppelin/contracts/\"]\n"
  },
  {
    "path": "funding.json",
    "content": "{\n  \"opRetro\": {\n    \"projectId\": \"0xa88844cea135382e3484e39c3172033437121b35ca0bc8b10b9b8253984876b5\"\n  }\n}\n"
  },
  {
    "path": "hardhat.config.ts",
    "content": "import '@nomicfoundation/hardhat-toolbox';\nimport '@nomiclabs/hardhat-solhint';\nimport 'hardhat-contract-sizer';\nimport { HardhatUserConfig } from 'hardhat/config';\nimport { MochaOptions } from 'mocha';\n\ninterface EnvOptions {\n  PROFILE?: boolean;\n}\n\nconst { PROFILE: isProfiling }: EnvOptions = process.env as any as EnvOptions;\n\nconst mochaOptions = (): MochaOptions => {\n  let timeout = 600000;\n  let reporter;\n\n  if (isProfiling) {\n    timeout = 0;\n    reporter = 'mocha-silent-reporter';\n  }\n\n  return {\n    timeout,\n    color: true,\n    bail: true,\n    reporter\n  };\n};\n\nconst config: HardhatUserConfig = {\n  networks: {\n    hardhat: {\n      accounts: {\n        count: 20,\n        accountsBalance: '10000000000000000000000000000000000000000000000'\n      },\n      allowUnlimitedContractSize: true\n    }\n  },\n\n  solidity: {\n    version: '0.8.28',\n    settings: {\n      optimizer: {\n        enabled: true,\n        runs: 1000000\n      },\n      evmVersion: 'paris', // Prevent using the `PUSH0` opcode\n      metadata: {\n        bytecodeHash: 'none' // Remove the metadata hash from the bytecode\n      }\n    }\n  },\n\n  typechain: {\n    target: 'ethers-v6'\n  },\n\n  contractSizer: {\n    alphaSort: true,\n    runOnCompile: false,\n    disambiguatePaths: false\n  },\n\n  gasReporter: {\n    currency: 'USD',\n    enabled: isProfiling\n  },\n\n  mocha: mochaOptions()\n};\n\nexport default config;\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@ethereum-attestation-service/eas-contracts\",\n  \"version\": \"1.9.0\",\n  \"description\": \"Ethereum Attestation Service\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/ethereum-attestation-service/eas-contracts\"\n  },\n  \"author\": \"Leonid Beder <leonid@lbeder.com>\",\n  \"license\": \"MIT\",\n  \"main\": \"dist/typechain-types/index.js\",\n  \"types\": \"dist/typechain-types/index.d.ts\",\n  \"files\": [\n    \"**/*.sol\",\n    \"!/contracts/tests/**/*\",\n    \"/artifacts/contracts\",\n    \"!/artifacts/contracts/tests/**/*\",\n    \"/dist/typechain-types\",\n    \"!/dist/typechain-types/contracts/tests/**/*\",\n    \"!/dist/typechain-types/factories/contracts/tests/**/*\",\n    \"!/deployments/hardhat/**/*\",\n    \"/deployments/mainnet/**/*\",\n    \"/deployments/optimism/**/*\",\n    \"/deployments/base/**/*\",\n    \"/deployments/arbitrum-one/**/*\",\n    \"/deployments/arbitrum-nova/**/*\",\n    \"/deployments/polygon/**/*\",\n    \"/deployments/scroll/**/*\",\n    \"/deployments/zksync/**/*\",\n    \"/deployments/celo/**/*\",\n    \"/deployments/linea/**/*\",\n    \"/deployments/telos/**/*\",\n    \"/deployments/soneium/**/*\",\n    \"/deployments/ink/**/*\",\n    \"/deployments/unichain/**/*\",\n    \"/deployments/sepolia/**/*\",\n    \"/deployments/optimism-sepolia/**/*\",\n    \"/deployments/optimism-goerli/**/*\",\n    \"/deployments/base-sepolia/**/*\",\n    \"/deployments/base-goerli/**/*\",\n    \"/deployments/arbitrum-sepolia/**/*\",\n    \"/deployments/polygon-amoy/**/*\",\n    \"/deployments/scroll-sepolia/**/*\",\n    \"/deployments/linea-goerli/**/*\"\n  ],\n  \"scripts\": {\n    \"compile\": \"hardhat compile\",\n    \"recompile\": \"pnpm clean && pnpm compile\",\n    \"test\": \"hardhat test\",\n    \"test:coverage\": \"hardhat coverage --solcoverjs .solcover.ts\",\n    \"test:profile\": \"PROFILE=1 pnpm test\",\n    \"lint\": \"pnpm lint:sol && pnpm lint:ts\",\n    \"lint:sol\": \"solhint --max-warnings 0 contracts/**/*.sol\",\n    \"lint:ts\": \"pnpm eslint components/**/*.ts test/**/*.ts utils/**/*.ts\",\n    \"format\": \"prettier --check --write contracts/**/*.sol *.ts components/**/*.ts test/**/*.ts utils/**/*.ts --config .prettierrc\",\n    \"size\": \"hardhat size-contracts\",\n    \"verify\": \"hardhat verify\",\n    \"flatten\": \"hardhat flatten\",\n    \"clean\": \"rm -rf artifacts cache dist coverage typechain-types out artifacts-zk cache-zk\",\n    \"prepare\": \"pnpm compile\",\n    \"export-types\": \"pnpm delete-test-types && tsc -p tsconfig.release.json && copyfiles -u 1 \\\"typechain-types/**/*.d.ts\\\" dist/typechain-types && pnpm restore-test-types\",\n    \"delete-test-types\": \"sed -i.bak '/tests/d' typechain-types/index.ts typechain-types/contracts/index.ts typechain-types/factories/contracts/index.ts && mv typechain-types/hardhat.d.ts typechain-types/hardhat.d.ts.bak\",\n    \"restore-test-types\": \"mv typechain-types/index.ts.bak typechain-types/index.ts && mv typechain-types/contracts/index.ts.bak typechain-types/contracts/index.ts && mv typechain-types/factories/contracts/index.ts.bak typechain-types/factories/contracts/index.ts && mv typechain-types/hardhat.d.ts.bak typechain-types/hardhat.d.ts\",\n    \"prepare:release\": \"pnpm prepare && pnpm export-types && pnpm lint && pnpm test\"\n  },\n  \"dependencies\": {\n    \"hardhat\": \"2.22.18\"\n  },\n  \"devDependencies\": {\n    \"@ianvs/prettier-plugin-sort-imports\": \"^4.4.1\",\n    \"@nomicfoundation/hardhat-ethers\": \"^3.0.8\",\n    \"@nomicfoundation/hardhat-toolbox\": \"^5.0.0\",\n    \"@nomiclabs/hardhat-solhint\": \"^4.0.1\",\n    \"@openzeppelin/contracts\": \"5.2.0\",\n    \"@typechain/ethers-v6\": \"^0.5.1\",\n    \"@types/chai\": \"^5.0.1\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^22.12.0\",\n    \"chai-bigint\": \"^0.2.0\",\n    \"copyfiles\": \"^2.4.1\",\n    \"eslint\": \"^9.19.0\",\n    \"eslint-config-prettier\": \"^10.0.1\",\n    \"eslint-plugin-chai-friendly\": \"^1.0.1\",\n    \"eslint-plugin-import\": \"^2.31.0\",\n    \"ethereumjs-util\": \"^7.1.5\",\n    \"ethers\": \"^6.13.5\",\n    \"hardhat-contract-sizer\": \"^2.10.0\",\n    \"mocha\": \"^11.1.0\",\n    \"mocha-silent-reporter\": \"^1.0.0\",\n    \"prettier\": \"^3.4.2\",\n    \"prettier-package-json\": \"^2.8.0\",\n    \"prettier-plugin-solidity\": \"^1.4.2\",\n    \"solc\": \"0.8.28\",\n    \"solhint\": \"^5.0.5\",\n    \"ts-node\": \"^10.9.2\",\n    \"typescript\": \"^5.7.3\",\n    \"typescript-eslint\": \"^8.22.0\"\n  }\n}\n"
  },
  {
    "path": "test/EAS.ts",
    "content": "import { encodeBytes32String, Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../components/Contracts';\nimport { SchemaRegistry, TestEAS, TestEIP712Proxy } from '../typechain-types';\nimport { NO_EXPIRATION, ZERO_ADDRESS, ZERO_BYTES32 } from '../utils/Constants';\nimport { getSchemaUID, getUIDFromAttestTx } from '../utils/EAS';\nimport { expect } from './helpers/Chai';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectFailedMultiRevocations,\n  expectFailedRevocation,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  SignatureType\n} from './helpers/EAS';\nimport { EIP712ProxyUtils } from './helpers/EIP712ProxyUtils';\nimport { EIP712Utils } from './helpers/EIP712Utils';\nimport { duration, latest } from './helpers/Time';\nimport { createWallet } from './helpers/Wallet';\n\nconst EIP712_NAME = 'EAS';\nconst EIP712_PROXY_NAME = 'EAS-Proxy';\n\ndescribe('EAS', () => {\n  let accounts: Signer[];\n  let sender: Signer;\n  let sender2: Signer;\n  let recipient: Signer;\n  let recipient2: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let proxy: TestEIP712Proxy;\n  let eip712Utils: EIP712Utils;\n  let eip712ProxyUtils: EIP712ProxyUtils;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient, recipient2] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n    sender2 = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    proxy = await Contracts.TestEIP712Proxy.deploy(await eas.getAddress(), EIP712_PROXY_NAME);\n\n    eip712Utils = await EIP712Utils.fromVerifier(eas);\n    eip712ProxyUtils = await EIP712ProxyUtils.fromProxy(proxy);\n\n    const now = await latest();\n    expect(await eas.getTime()).to.equal(now);\n    await eas.setTime(now);\n    expect(await eas.getTime()).to.equal(now);\n  });\n\n  describe('construction', () => {\n    it('should revert when initialized with an empty schema registry', async () => {\n      await expect(Contracts.EAS.deploy(ZERO_ADDRESS)).to.be.revertedWithCustomError(eas, 'InvalidRegistry');\n    });\n\n    it('should be properly initialized', async () => {\n      expect(await eas.version()).to.equal('1.4.0');\n\n      expect(await eas.getSchemaRegistry()).to.equal(await registry.getAddress());\n      expect(await eas.getName()).to.equal(EIP712_NAME);\n    });\n  });\n\n  describe('attesting', () => {\n    let expirationTime: bigint;\n    const data = '0x1234';\n\n    beforeEach(async () => {\n      expirationTime = (await eas.getTime()) + duration.days(30n);\n    });\n\n    for (const signatureType of [SignatureType.Direct, SignatureType.Delegated, SignatureType.DelegatedProxy]) {\n      context(`via ${signatureType} attestation`, () => {\n        it('should revert when attesting to an unregistered schema', async () => {\n          await expectFailedAttestation(\n            {\n              eas,\n              eip712Utils,\n              eip712ProxyUtils\n            },\n            encodeBytes32String('BAD'),\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data\n            },\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n\n          // All requests are to unregistered schemas\n          await expectFailedMultiAttestations(\n            {\n              eas,\n              eip712Utils,\n              eip712ProxyUtils\n            },\n            [\n              {\n                schema: encodeBytes32String('BAD'),\n                requests: [\n                  {\n                    recipient: await recipient.getAddress(),\n                    expirationTime,\n                    data\n                  }\n                ]\n              },\n              {\n                schema: encodeBytes32String('BAD2'),\n                requests: [\n                  {\n                    recipient: await recipient.getAddress(),\n                    expirationTime,\n                    data\n                  }\n                ]\n              }\n            ],\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n        });\n\n        context('with registered schemas', () => {\n          const schema1 = 'bool like';\n          const schema2 = 'bytes32 proposalId, bool vote';\n          const schema3 = 'bool hasPhoneNumber, bytes32 phoneHash';\n          const schema1Id = getSchemaUID(schema1, ZERO_ADDRESS, true);\n          const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, true);\n          const schema3Id = getSchemaUID(schema3, ZERO_ADDRESS, true);\n\n          beforeEach(async () => {\n            await registry.register(schema1, ZERO_ADDRESS, true);\n            await registry.register(schema2, ZERO_ADDRESS, true);\n            await registry.register(schema3, ZERO_ADDRESS, true);\n          });\n\n          it('should revert when multi attesting using invalid parameters', async () => {\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: []\n                },\n                {\n                  schema: schema1Id,\n                  requests: [{ recipient: await recipient.getAddress(), expirationTime, data }]\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidLength'\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [{ recipient: await recipient.getAddress(), expirationTime, data }]\n                },\n                {\n                  schema: schema1Id,\n                  requests: []\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidLength'\n            );\n          });\n\n          it('should revert when multi attesting to multiple unregistered schemas', async () => {\n            // Only one of the requests is to an unregistered schema\n            await expectFailedMultiAttestations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n\n                      expirationTime,\n                      data\n                    }\n                  ]\n                },\n                {\n                  schema: schema2Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n\n                      expirationTime,\n                      data\n                    }\n                  ]\n                },\n                {\n                  schema: encodeBytes32String('BAD'),\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n\n                      expirationTime,\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidSchema'\n            );\n          });\n\n          it('should revert when attesting with passed expiration time', async () => {\n            const expired = (await eas.getTime()) - duration.days(1n);\n\n            await expectFailedAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema1Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: expired,\n                data\n              },\n              { signatureType, from: sender },\n              'InvalidExpirationTime'\n            );\n\n            // The first request is invalid\n            await expectFailedMultiAttestations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime: expired,\n                      data\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data\n                    }\n                  ]\n                },\n                {\n                  schema: schema2Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidExpirationTime'\n            );\n\n            // The second request is invalid\n            await expectFailedMultiAttestations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data\n                    }\n                  ]\n                },\n                {\n                  schema: schema2Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime: expired,\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidExpirationTime'\n            );\n          });\n\n          it('should allow attesting to an empty recipient', async () => {\n            await expectAttestation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schema1Id,\n              { recipient: ZERO_ADDRESS, expirationTime, data: '0x00' },\n              { signatureType, from: sender }\n            );\n\n            await expectMultiAttestations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    { recipient: ZERO_ADDRESS, expirationTime, data: encodeBytes32String('1') },\n                    { recipient: ZERO_ADDRESS, expirationTime, data: encodeBytes32String('2') }\n                  ]\n                },\n                {\n                  schema: schema2Id,\n                  requests: [\n                    { recipient: ZERO_ADDRESS, expirationTime, data: encodeBytes32String('3') },\n                    { recipient: ZERO_ADDRESS, expirationTime, data: encodeBytes32String('4') }\n                  ]\n                }\n              ],\n              { signatureType, from: sender }\n            );\n          });\n\n          it('should allow self attestations', async () => {\n            await expectAttestation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schema2Id,\n              { recipient: await sender.getAddress(), expirationTime, data: encodeBytes32String('0') },\n              { signatureType, from: sender }\n            );\n\n            await expectMultiAttestations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    { recipient: await sender.getAddress(), expirationTime, data: encodeBytes32String('1') },\n                    { recipient: await sender.getAddress(), expirationTime, data: encodeBytes32String('2') }\n                  ]\n                }\n              ],\n              { signatureType, from: sender }\n            );\n          });\n\n          it('should allow multiple attestations', async () => {\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema1Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: encodeBytes32String('0')\n              },\n              { signatureType, from: sender }\n            );\n\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema1Id,\n              {\n                recipient: await recipient2.getAddress(),\n                expirationTime,\n                data: encodeBytes32String('1')\n              },\n              {\n                signatureType,\n                from: sender\n              }\n            );\n          });\n\n          it('should allow multiple attestations to the same schema', async () => {\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema3Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: encodeBytes32String('0')\n              },\n              {\n                signatureType,\n                from: sender\n              }\n            );\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema3Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: encodeBytes32String('1')\n              },\n              {\n                signatureType,\n                from: sender\n              }\n            );\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema3Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: encodeBytes32String('2')\n              },\n              {\n                signatureType,\n                from: sender\n              }\n            );\n          });\n\n          it('should allow attestation without expiration time', async () => {\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema1Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: NO_EXPIRATION,\n                data: encodeBytes32String('0')\n              },\n              { signatureType, from: sender }\n            );\n\n            await expectMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime: NO_EXPIRATION,\n                      data: encodeBytes32String('1')\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime: NO_EXPIRATION,\n                      data: encodeBytes32String('2')\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender }\n            );\n          });\n\n          it('should allow attestation without any data', async () => {\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema3Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: encodeBytes32String('0')\n              },\n              { signatureType, from: sender }\n            );\n\n            await expectMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema2Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data: encodeBytes32String('1')\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data: encodeBytes32String('2')\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender }\n            );\n          });\n\n          it('should store referenced attestation', async () => {\n            const uid = await getUIDFromAttestTx(\n              eas.attest({\n                schema: schema1Id,\n                data: {\n                  recipient: await recipient.getAddress(),\n                  expirationTime,\n                  revocable: true,\n                  refUID: ZERO_BYTES32,\n                  data,\n                  value: 0\n                }\n              })\n            );\n\n            await expectAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema3Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                refUID: uid,\n                data\n              },\n              {\n                signatureType,\n                from: sender\n              }\n            );\n\n            await expectMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      refUID: uid,\n                      data: encodeBytes32String('1')\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      refUID: uid,\n                      data: encodeBytes32String('2')\n                    }\n                  ]\n                }\n              ],\n              {\n                signatureType,\n                from: sender\n              }\n            );\n          });\n\n          if (signatureType !== SignatureType.DelegatedProxy) {\n            it('should generate unique UIDs for similar attestations', async () => {\n              const uid1 = await expectAttestation(\n                {\n                  eas,\n                  eip712Utils,\n                  eip712ProxyUtils\n                },\n                schema3Id,\n                {\n                  recipient: await recipient.getAddress(),\n                  expirationTime,\n                  data\n                },\n                {\n                  signatureType,\n                  from: sender,\n                  bump: 0\n                }\n              );\n              const uid2 = await expectAttestation(\n                {\n                  eas,\n                  eip712Utils,\n                  eip712ProxyUtils\n                },\n                schema3Id,\n                {\n                  recipient: await recipient.getAddress(),\n                  expirationTime,\n                  data\n                },\n                {\n                  signatureType,\n                  from: sender,\n                  bump: 1\n                }\n              );\n              const uid3 = await expectAttestation(\n                {\n                  eas,\n                  eip712Utils,\n                  eip712ProxyUtils\n                },\n                schema3Id,\n                {\n                  recipient: await recipient.getAddress(),\n                  expirationTime,\n                  data\n                },\n                {\n                  signatureType,\n                  from: sender,\n                  bump: 2\n                }\n              );\n              expect(uid1).not.to.equal(uid2);\n              expect(uid2).not.to.equal(uid3);\n            });\n          }\n\n          it('should allow multi layered attestations', async () => {\n            await expectMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('0') },\n                    { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('1') }\n                  ]\n                },\n                {\n                  schema: schema2Id,\n                  requests: [\n                    { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('2') }\n                  ]\n                },\n                {\n                  schema: schema3Id,\n                  requests: [\n                    { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('3') },\n                    { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('4') }\n                  ]\n                }\n              ],\n              { signatureType, from: sender }\n            );\n          });\n\n          it('should revert when attesting to non-existing attestations', async () => {\n            await expectFailedAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schema3Id,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                refUID: encodeBytes32String('INVALID'),\n                data\n              },\n              { signatureType, from: sender },\n              'NotFound'\n            );\n\n            const uid = await getUIDFromAttestTx(\n              eas.attest({\n                schema: schema1Id,\n                data: {\n                  recipient: await recipient.getAddress(),\n                  expirationTime,\n                  revocable: true,\n                  refUID: ZERO_BYTES32,\n                  data,\n                  value: 0\n                }\n              })\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      refUID: encodeBytes32String('INVALID'),\n                      data\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      refUID: uid,\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'NotFound'\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      refUID: uid,\n                      data\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      refUID: encodeBytes32String('INVALID'),\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'NotFound'\n            );\n          });\n\n          it('should revert when attesting to empty schemas', async () => {\n            await expectFailedAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              ZERO_BYTES32,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data\n              },\n              { signatureType, from: sender },\n              'InvalidSchema'\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: ZERO_BYTES32,\n                  requests: [{ recipient: await recipient.getAddress(), expirationTime, data }]\n                },\n                {\n                  schema: schema1Id,\n                  requests: [{ recipient: await recipient.getAddress(), expirationTime, data }]\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidSchema'\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schema1Id,\n                  requests: [{ recipient: await recipient.getAddress(), expirationTime, data }]\n                },\n                {\n                  schema: ZERO_BYTES32,\n                  requests: [{ recipient: await recipient.getAddress(), expirationTime, data }]\n                }\n              ],\n              { signatureType, from: sender },\n              'InvalidSchema'\n            );\n          });\n        });\n\n        context('with an irrevocable schema', () => {\n          const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n          const schemaId = getSchemaUID(schema, ZERO_ADDRESS, false);\n\n          beforeEach(async () => {\n            await registry.register(schema, ZERO_ADDRESS, false);\n          });\n\n          it('should revert when attempting to make a revocable attestation', async () => {\n            await expectFailedAttestation(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              schemaId,\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data\n              },\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schemaId,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      revocable: false,\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n\n            await expectFailedMultiAttestations(\n              {\n                eas,\n                eip712Utils,\n                eip712ProxyUtils\n              },\n              [\n                {\n                  schema: schemaId,\n                  requests: [\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      revocable: false,\n                      data\n                    },\n                    {\n                      recipient: await recipient.getAddress(),\n                      expirationTime,\n                      data\n                    }\n                  ]\n                }\n              ],\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n          });\n        });\n      });\n    }\n\n    it('should revert when multi delegation attesting with inconsistent input lengths', async () => {\n      const schema = 'bool count, bytes32 id';\n      const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true);\n      await registry.register(schema, ZERO_ADDRESS, true);\n\n      await expect(\n        eas.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              }\n            ],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('BAD'),\n                s: encodeBytes32String('BAD')\n              }\n            ],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        eas.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('BAD'),\n                s: encodeBytes32String('BAD')\n              }\n            ],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        eas.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              }\n            ],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('1'),\n                s: encodeBytes32String('2')\n              },\n              {\n                v: 28,\n                r: encodeBytes32String('3'),\n                s: encodeBytes32String('4')\n              }\n            ],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        eas.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              }\n            ],\n            signatures: [],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n    });\n  });\n\n  describe('revocation', () => {\n    const schema = 'bool hasPhoneNumber, bytes32 phoneHash';\n    const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true);\n\n    let expirationTime: bigint;\n    const data = '0x1234';\n\n    beforeEach(async () => {\n      await registry.register(schema, ZERO_ADDRESS, true);\n\n      expirationTime = (await eas.getTime()) + duration.days(30n);\n    });\n\n    for (const signatureType of [SignatureType.Direct, SignatureType.Delegated, SignatureType.DelegatedProxy]) {\n      context(`via ${signatureType} revocation`, () => {\n        let uid: string;\n        let uids: string[] = [];\n\n        beforeEach(async () => {\n          ({ uid } = await expectAttestation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schemaId,\n            { recipient: ZERO_ADDRESS, expirationTime, data: encodeBytes32String('0') },\n            { signatureType, from: sender }\n          ));\n\n          uids = [];\n\n          for (let i = 0; i < 2; i++) {\n            const { uid: newUID } = await expectAttestation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schemaId,\n              { recipient: ZERO_ADDRESS, expirationTime, data: encodeBytes32String((i + 1).toString()) },\n              { signatureType, from: sender }\n            );\n\n            uids.push(newUID);\n          }\n        });\n\n        it('should revert when revoking a non-existing attestation', async () => {\n          await expectFailedRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schemaId,\n            { uid: encodeBytes32String('BAD') },\n            { signatureType, from: sender },\n            'NotFound'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [{ schema: schemaId, requests: [{ uid: encodeBytes32String('BAD') }, { uid }] }],\n            { signatureType, from: sender },\n            'NotFound'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [{ schema: schemaId, requests: [{ uid }, { uid: encodeBytes32String('BAD') }] }],\n            { signatureType, from: sender },\n            'NotFound'\n          );\n        });\n\n        it(\"should revert when revoking a someone's else attestation\", async () => {\n          await expectFailedRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schemaId,\n            { uid },\n            { signatureType, from: sender2 },\n            'AccessDenied'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [{ schema: schemaId, requests: [{ uid }, { uid: uids[0] }] }],\n            { signatureType, from: sender2 },\n            'AccessDenied'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [{ schema: schemaId, requests: [{ uid: uids[1] }, { uid }] }],\n            { signatureType, from: sender2 },\n            'AccessDenied'\n          );\n        });\n\n        it('should allow to revoke existing attestations', async () => {\n          await expectRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schemaId,\n            { uid },\n            { signatureType, from: sender }\n          );\n\n          await expectMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [\n              {\n                schema: schemaId,\n                requests: uids.map((uid) => ({ uid }))\n              }\n            ],\n            { signatureType, from: sender }\n          );\n        });\n\n        it('should revert when revoking an already revoked attestation', async () => {\n          await expectRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schemaId,\n            { uid },\n            { signatureType, from: sender }\n          );\n\n          await expectFailedRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schemaId,\n            { uid },\n            { signatureType, from: sender, deadline: (await latest()) + duration.days(1n) },\n            'AlreadyRevoked'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [{ schema: schemaId, requests: [{ uid }, { uid: uids[0] }] }],\n            { signatureType, from: sender, deadline: (await latest()) + duration.days(1n) },\n            'AlreadyRevoked'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [{ schema: schemaId, requests: [{ uid: uids[1] }, { uid }] }],\n            { signatureType, from: sender, deadline: (await latest()) + duration.days(1n) },\n            'AlreadyRevoked'\n          );\n        });\n\n        it('should revert when attempting to revoke attestations while specifying the wrong schema', async () => {\n          const schema2 = 'bool count, bytes32 id';\n          const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, true);\n          await registry.register(schema2, ZERO_ADDRESS, true);\n\n          await expectFailedRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            schema2Id,\n            { uid },\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [\n              { schema: schema2Id, requests: [{ uid }] },\n              { schema: schemaId, requests: [{ uid: uids[0] }] }\n            ],\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [\n              { schema: schemaId, requests: [{ uid }] },\n              { schema: schema2Id, requests: [{ uid: uids[0] }] }\n            ],\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n        });\n\n        it('should revert when attempting to revoke attestations while specifying an empty schema', async () => {\n          await expectFailedRevocation(\n            { eas, eip712Utils, eip712ProxyUtils },\n            ZERO_BYTES32,\n            { uid },\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [\n              { schema: ZERO_BYTES32, requests: [{ uid }] },\n              { schema: schemaId, requests: [{ uid: uids[0] }] }\n            ],\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n\n          await expectFailedMultiRevocations(\n            { eas, eip712Utils, eip712ProxyUtils },\n            [\n              { schema: schemaId, requests: [{ uid }] },\n              { schema: ZERO_BYTES32, requests: [{ uid: uids[0] }] }\n            ],\n            { signatureType, from: sender },\n            'InvalidSchema'\n          );\n        });\n\n        context('with irrevocable attestations', () => {\n          beforeEach(async () => {\n            ({ uid } = await expectAttestation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schemaId,\n              { recipient: ZERO_ADDRESS, expirationTime, revocable: false, data: encodeBytes32String('0') },\n              { signatureType, from: sender }\n            ));\n\n            uids = [];\n\n            for (let i = 0; i < 2; i++) {\n              const { uid: newUID } = await expectAttestation(\n                { eas, eip712Utils, eip712ProxyUtils },\n                schemaId,\n                {\n                  recipient: ZERO_ADDRESS,\n                  expirationTime,\n                  revocable: false,\n                  data: encodeBytes32String((i + 1).toString())\n                },\n                { signatureType, from: sender }\n              );\n\n              uids.push(newUID);\n            }\n          });\n\n          it('should revert when revoking', async () => {\n            await expectFailedRevocation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schemaId,\n              { uid },\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n\n            await expectFailedMultiRevocations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [{ schema: schemaId, requests: [{ uid }, { uid: uids[0] }] }],\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n\n            await expectFailedMultiRevocations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [{ schema: schemaId, requests: [{ uid: uids[1] }, { uid }] }],\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n          });\n        });\n\n        context('with an irrevocable schema', () => {\n          const schema2 = 'bool isFriend';\n          const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, false);\n\n          beforeEach(async () => {\n            await registry.register(schema2, ZERO_ADDRESS, false);\n\n            ({ uid } = await expectAttestation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schema2Id,\n              { recipient: ZERO_ADDRESS, expirationTime, revocable: false, data: encodeBytes32String('0') },\n              { signatureType, from: sender }\n            ));\n\n            uids = [];\n\n            for (let i = 0; i < 2; i++) {\n              const { uid: newUID } = await expectAttestation(\n                { eas, eip712Utils, eip712ProxyUtils },\n                schema2Id,\n                {\n                  recipient: ZERO_ADDRESS,\n                  expirationTime,\n                  revocable: false,\n                  data: encodeBytes32String((i + 1).toString())\n                },\n                { signatureType, from: sender }\n              );\n\n              uids.push(newUID);\n            }\n          });\n\n          it('should revert when revoking', async () => {\n            await expectFailedRevocation(\n              { eas, eip712Utils, eip712ProxyUtils },\n              schema2Id,\n              { uid },\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n\n            await expectFailedMultiRevocations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [{ schema: schema2Id, requests: [{ uid }, { uid: uids[0] }] }],\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n\n            await expectFailedMultiRevocations(\n              { eas, eip712Utils, eip712ProxyUtils },\n              [{ schema: schema2Id, requests: [{ uid: uids[1] }, { uid }] }],\n              { signatureType, from: sender },\n              'Irrevocable'\n            );\n          });\n        });\n      });\n    }\n\n    it('should revert when multi delegation revoking with inconsistent input lengths', async () => {\n      const uid = await getUIDFromAttestTx(\n        eas.connect(sender).attest({\n          schema: schemaId,\n          data: {\n            recipient: await recipient.getAddress(),\n            expirationTime,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data,\n            value: 0\n          }\n        })\n      );\n      const uid2 = await getUIDFromAttestTx(\n        eas.connect(sender).attest({\n          schema: schemaId,\n          data: {\n            recipient: await recipient.getAddress(),\n            expirationTime,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data,\n            value: 0\n          }\n        })\n      );\n\n      await expect(\n        eas.multiRevokeByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              { uid, value: 0 },\n              { uid: uid2, value: 0 }\n            ],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('1'),\n                s: encodeBytes32String('2')\n              }\n            ],\n            revoker: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        eas.multiRevokeByDelegation([\n          {\n            schema: schemaId,\n            data: [],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('1'),\n                s: encodeBytes32String('2')\n              }\n            ],\n            revoker: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        eas.multiRevokeByDelegation([\n          {\n            schema: schemaId,\n            data: [{ uid, value: 0 }],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('1'),\n                s: encodeBytes32String('2')\n              },\n              {\n                v: 28,\n                r: encodeBytes32String('3'),\n                s: encodeBytes32String('4')\n              }\n            ],\n            revoker: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        eas.multiRevokeByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              { uid, value: 0 },\n              { uid: uid2, value: 0 }\n            ],\n            signatures: [],\n            revoker: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n    });\n  });\n\n  describe('timestamping', () => {\n    const expectTimestamp = async (data: string | string[]) => {\n      const res = Array.isArray(data) ? await eas.multiTimestamp(data) : await eas.timestamp(data);\n      const timestamp = await eas.getTime();\n\n      for (const item of Array.isArray(data) ? data : [data]) {\n        await expect(res).to.emit(eas, 'Timestamped').withArgs(item, timestamp);\n\n        expect(await eas.getTimestamp(item)).to.equal(timestamp);\n      }\n    };\n\n    const data1 = encodeBytes32String('0x1234');\n    const data2 = encodeBytes32String('0x4567');\n    const data3 = encodeBytes32String('0x6666');\n    const data4 = encodeBytes32String('Hello World');\n    const data5 = encodeBytes32String('0x8888');\n\n    it('should timestamp a single data', async () => {\n      await expectTimestamp(data1);\n      await expectTimestamp(data2);\n      await expectTimestamp(ZERO_BYTES32);\n    });\n\n    it('should timestamp multiple data', async () => {\n      await expectTimestamp([data1, data2, ZERO_BYTES32]);\n      await expectTimestamp([data3, data4, data5]);\n    });\n\n    it('should revert when attempting to timestamp the same data twice', async () => {\n      const data = data1;\n      await expectTimestamp(data);\n\n      await expect(eas.timestamp(data)).to.be.revertedWithCustomError(eas, 'AlreadyTimestamped');\n    });\n\n    it('should revert when attempting to timestamp the same multiple data twice', async () => {\n      const data = [data1, data4];\n      await expectTimestamp(data);\n\n      await expect(eas.multiTimestamp(data)).to.be.revertedWithCustomError(eas, 'AlreadyTimestamped');\n      await expect(eas.multiTimestamp([data3, ...data])).to.be.revertedWithCustomError(eas, 'AlreadyTimestamped');\n    });\n\n    it(\"should return 0 for any data that wasn't timestamped\", async () => {\n      expect(await eas.getTimestamp(data5)).to.equal(0);\n    });\n  });\n\n  describe('revoking offchain', () => {\n    const expectRevoke = async (data: string | string[]) => {\n      const res = Array.isArray(data)\n        ? await eas.connect(sender).multiRevokeOffchain(data)\n        : await eas.connect(sender).revokeOffchain(data);\n\n      const timestamp = await eas.getTime();\n\n      for (const item of Array.isArray(data) ? data : [data]) {\n        await expect(res)\n          .to.emit(eas, 'RevokedOffchain')\n          .withArgs(await sender.getAddress(), item, timestamp);\n        expect(await eas.getRevokeOffchain(await sender.getAddress(), item)).to.equal(timestamp);\n      }\n    };\n\n    const data1 = encodeBytes32String('0x1234');\n    const data2 = encodeBytes32String('0x4567');\n    const data3 = encodeBytes32String('0x6666');\n    const data4 = encodeBytes32String('Hello World');\n    const data5 = encodeBytes32String('0x8888');\n\n    it('should revoke a single data', async () => {\n      await expectRevoke(data1);\n      await expectRevoke(data2);\n      await expectRevoke(ZERO_BYTES32);\n    });\n\n    it('should revoke multiple data', async () => {\n      await expectRevoke([data1, data2, ZERO_BYTES32]);\n      await expectRevoke([data3, data4, data5]);\n    });\n\n    it('should revert when attempting to revoke the same data twice', async () => {\n      const data = data1;\n      await expectRevoke(data);\n\n      await expect(eas.connect(sender).revokeOffchain(data)).to.be.revertedWithCustomError(\n        eas,\n        'AlreadyRevokedOffchain'\n      );\n    });\n\n    it('should not revert when attempting to revoke the same data twice with two different accounts', async () => {\n      const data = data1;\n      await expectRevoke(data);\n\n      await expect(eas.connect(sender2).revokeOffchain(data)).to.not.be.revertedWithCustomError(\n        eas,\n        'AlreadyRevokedOffchain'\n      );\n    });\n\n    it('should revert when attempting to timestamp the same multiple data twice', async () => {\n      const data = [data1, data4];\n      await expectRevoke(data);\n\n      await expect(eas.connect(sender).multiRevokeOffchain(data)).to.be.revertedWithCustomError(\n        eas,\n        'AlreadyRevokedOffchain'\n      );\n      await expect(eas.connect(sender).multiRevokeOffchain([data3, ...data])).to.be.revertedWithCustomError(\n        eas,\n        'AlreadyRevokedOffchain'\n      );\n    });\n\n    it(\"should return 0 for any data that wasn't timestamped\", async () => {\n      expect(await eas.getRevokeOffchain(await sender.getAddress(), data5)).to.equal(0);\n    });\n  });\n});\n"
  },
  {
    "path": "test/Indexer.ts",
    "content": "import { encodeBytes32String, Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../components/Contracts';\nimport { EAS, Indexer, SchemaRegistry } from '../typechain-types';\nimport { NO_EXPIRATION, ZERO_ADDRESS, ZERO_BYTES, ZERO_BYTES32 } from '../utils/Constants';\nimport { getSchemaUID, getUIDFromAttestTx } from '../utils/EAS';\nimport { expect } from './helpers/Chai';\n\ndescribe('Indexer', () => {\n  let accounts: Signer[];\n  let sender: Signer;\n  let recipient: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: EAS;\n  let indexer: Indexer;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [sender, recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.EAS.deploy(await registry.getAddress());\n\n    indexer = await Contracts.Indexer.deploy(await eas.getAddress());\n  });\n\n  describe('construction', () => {\n    it('should revert when initialized with an empty EAS', async () => {\n      await expect(Contracts.Indexer.deploy(ZERO_ADDRESS)).to.be.revertedWithCustomError(indexer, 'InvalidEAS');\n    });\n\n    it('should be properly initialized', async () => {\n      expect(await indexer.version()).to.equal('1.4.0');\n\n      expect(await indexer.getEAS()).to.equal(await eas.getAddress());\n    });\n  });\n\n  describe('indexing', () => {\n    context('without any attestations', () => {\n      it('should revert when attempting to index a non-existing attestation', async () => {\n        await expect(indexer.indexAttestation(encodeBytes32String('BAD'))).to.be.revertedWithCustomError(\n          indexer,\n          'InvalidAttestation'\n        );\n      });\n\n      it('should revert when attempting to index multiple non-existing attestation', async () => {\n        await expect(\n          indexer.indexAttestations([encodeBytes32String('BAD1'), encodeBytes32String('BAD2')])\n        ).to.be.revertedWithCustomError(indexer, 'InvalidAttestation');\n      });\n    });\n\n    context('with attestations', () => {\n      const schema = 'bool liked';\n      const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true);\n      let uids: string[] = [];\n\n      beforeEach(async () => {\n        await registry.register(schema, ZERO_ADDRESS, true);\n      });\n\n      beforeEach(async () => {\n        uids = [];\n\n        for (let i = 0; i < 3; i++) {\n          const res = await eas.connect(sender).attest({\n            schema: schemaId,\n            data: {\n              recipient,\n              expirationTime: NO_EXPIRATION,\n              revocable: true,\n              refUID: ZERO_BYTES32,\n              data: ZERO_BYTES,\n              value: 0n\n            }\n          });\n\n          uids.push(await getUIDFromAttestTx(res));\n        }\n      });\n\n      interface UIDInfo {\n        receivedAttestationsCount: bigint;\n        receivedAttestations: string[];\n        receivedAttestationsReversed: string[];\n        sentAttestationsCount: bigint;\n        sentAttestations: string[];\n        sentAttestationsReversed: string[];\n        schemaAttesterRecipientAttestationCount: bigint;\n        schemaAttesterRecipientAttestations: string[];\n        schemaAttesterRecipientAttestationsReversed: string[];\n        schemaAttestationUIDCount: bigint;\n        schemaAttestationUIDs: string[];\n        schemaAttestationUIDsReversed: string[];\n      }\n\n      const expectIndexedAttestations = async (uids: string[]) => {\n        const infos: Record<string, UIDInfo> = {};\n\n        for (const uid of uids) {\n          const info: UIDInfo = {\n            receivedAttestationsCount: 0n,\n            receivedAttestations: [],\n            receivedAttestationsReversed: [],\n            sentAttestationsCount: 0n,\n            sentAttestations: [],\n            sentAttestationsReversed: [],\n            schemaAttesterRecipientAttestationCount: 0n,\n            schemaAttesterRecipientAttestations: [],\n            schemaAttesterRecipientAttestationsReversed: [],\n            schemaAttestationUIDCount: 0n,\n            schemaAttestationUIDs: [],\n            schemaAttestationUIDsReversed: []\n          };\n\n          expect(await indexer.isAttestationIndexed(uid)).to.be.false;\n\n          info.receivedAttestationsCount = await indexer.getReceivedAttestationUIDCount(\n            await recipient.getAddress(),\n            schemaId\n          );\n          info.receivedAttestations = await indexer.getReceivedAttestationUIDs(\n            await recipient.getAddress(),\n            schemaId,\n            0,\n            info.receivedAttestationsCount,\n            false\n          );\n          info.receivedAttestationsReversed = await indexer.getReceivedAttestationUIDs(\n            await recipient.getAddress(),\n            schemaId,\n            0,\n            info.receivedAttestationsCount,\n            true\n          );\n\n          expect(info.receivedAttestations).not.to.include(uid);\n          expect(info.receivedAttestationsReversed).not.to.include(uid);\n\n          info.sentAttestationsCount = await indexer.getSentAttestationUIDCount(await sender.getAddress(), schemaId);\n          info.sentAttestations = await indexer.getSentAttestationUIDs(\n            await sender.getAddress(),\n            schemaId,\n            0,\n            info.sentAttestationsCount,\n            false\n          );\n          info.sentAttestationsReversed = await indexer.getSentAttestationUIDs(\n            await sender.getAddress(),\n            schemaId,\n            0,\n            info.sentAttestationsCount,\n            true\n          );\n\n          expect(info.sentAttestations).not.to.include(uid);\n          expect(info.sentAttestationsReversed).not.to.include(uid);\n\n          info.schemaAttesterRecipientAttestationCount = await indexer.getSchemaAttesterRecipientAttestationUIDCount(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress()\n          );\n          info.schemaAttesterRecipientAttestations = await indexer.getSchemaAttesterRecipientAttestationUIDs(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress(),\n            0,\n            info.schemaAttesterRecipientAttestationCount,\n            false\n          );\n          info.schemaAttesterRecipientAttestationsReversed = await indexer.getSchemaAttesterRecipientAttestationUIDs(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress(),\n            0,\n            info.schemaAttesterRecipientAttestationCount,\n            true\n          );\n\n          expect(info.schemaAttesterRecipientAttestations).not.to.include(uid);\n          expect(info.schemaAttesterRecipientAttestationsReversed).not.to.include(uid);\n\n          info.schemaAttestationUIDCount = await indexer.getSchemaAttestationUIDCount(schemaId);\n          info.schemaAttestationUIDs = await indexer.getSchemaAttestationUIDs(\n            schemaId,\n            0,\n            info.schemaAttestationUIDCount,\n            false\n          );\n          info.schemaAttestationUIDsReversed = await indexer.getSchemaAttestationUIDs(\n            schemaId,\n            0,\n            info.schemaAttestationUIDCount,\n            true\n          );\n\n          expect(info.schemaAttestationUIDs).not.to.include(uid);\n          expect(info.schemaAttestationUIDsReversed).not.to.include(uid);\n\n          infos[uid] = info;\n        }\n\n        const res = uids.length === 1 ? await indexer.indexAttestation(uids[0]) : await indexer.indexAttestations(uids);\n\n        for (const uid of uids) {\n          const info = infos[uid];\n\n          await expect(res).to.emit(indexer, 'Indexed').withArgs(uid);\n\n          expect(await indexer.isAttestationIndexed(uid)).to.be.true;\n\n          const receivedAttestationsCount = await indexer.getReceivedAttestationUIDCount(\n            await recipient.getAddress(),\n            schemaId\n          );\n          expect(receivedAttestationsCount).to.equal(info.receivedAttestationsCount + BigInt(uids.length));\n          expect(\n            await indexer.getReceivedAttestationUIDs(\n              await recipient.getAddress(),\n              schemaId,\n              0,\n              receivedAttestationsCount,\n              false\n            )\n          ).to.include(uid);\n          expect(\n            await indexer.getReceivedAttestationUIDs(\n              await recipient.getAddress(),\n              schemaId,\n              0,\n              receivedAttestationsCount,\n              true\n            )\n          ).to.include(uid);\n\n          const sentAttestationsCount = await indexer.getSentAttestationUIDCount(await sender.getAddress(), schemaId);\n          expect(sentAttestationsCount).to.equal(info.sentAttestationsCount + BigInt(uids.length));\n          expect(\n            await indexer.getSentAttestationUIDs(await sender.getAddress(), schemaId, 0, sentAttestationsCount, false)\n          ).to.include(uid);\n          expect(\n            await indexer.getSentAttestationUIDs(await sender.getAddress(), schemaId, 0, sentAttestationsCount, true)\n          ).to.include(uid);\n\n          const schemaAttesterRecipientAttestationCount = await indexer.getSchemaAttesterRecipientAttestationUIDCount(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress()\n          );\n          expect(schemaAttesterRecipientAttestationCount).to.equal(\n            info.schemaAttesterRecipientAttestationCount + BigInt(uids.length)\n          );\n          expect(\n            await indexer.getSchemaAttesterRecipientAttestationUIDs(\n              schemaId,\n              await sender.getAddress(),\n              await recipient.getAddress(),\n              0,\n              schemaAttesterRecipientAttestationCount,\n              false\n            )\n          ).to.include(uid);\n          expect(\n            await indexer.getSchemaAttesterRecipientAttestationUIDs(\n              schemaId,\n              await sender.getAddress(),\n              await recipient.getAddress(),\n              0,\n              schemaAttesterRecipientAttestationCount,\n              true\n            )\n          ).to.include(uid);\n\n          const schemaAttestationUIDCount = await indexer.getSchemaAttestationUIDCount(schemaId);\n          expect(schemaAttestationUIDCount).to.equal(info.schemaAttestationUIDCount + BigInt(uids.length));\n          expect(await indexer.getSchemaAttestationUIDs(schemaId, 0, schemaAttestationUIDCount, false)).to.include(uid);\n          expect(await indexer.getSchemaAttestationUIDs(schemaId, 0, schemaAttestationUIDCount, true)).to.include(uid);\n        }\n      };\n\n      const expectIndexedAttestation = (uid: string) => expectIndexedAttestations([uid]);\n\n      it('should index an attestation', async () => {\n        for (const uid of uids) {\n          await expectIndexedAttestation(uid);\n        }\n      });\n\n      it('should index multiple attestations', async () => {\n        await expectIndexedAttestations(uids);\n      });\n\n      it('should revert when attempting to index multiple non-existing attestation', async () => {\n        await expect(indexer.indexAttestations([...uids, encodeBytes32String('BAD')])).to.be.revertedWithCustomError(\n          indexer,\n          'InvalidAttestation'\n        );\n\n        await expect(indexer.indexAttestations([encodeBytes32String('BAD'), ...uids])).to.be.revertedWithCustomError(\n          indexer,\n          'InvalidAttestation'\n        );\n      });\n\n      it('should handle gracefully an attempt to index the same attestation twice', async () => {\n        for (const uid of uids) {\n          await expectIndexedAttestation(uid);\n\n          const res = await indexer.indexAttestation(uid);\n          expect(res).not.to.emit(indexer, 'Indexed');\n        }\n      });\n\n      it('should handle gracefully an attempt to index same attestations twice', async () => {\n        const indexedUids = uids.slice(2);\n        await expectIndexedAttestations(indexedUids);\n\n        const res = await indexer.indexAttestations(uids);\n        expect(res).not.to.emit(indexer, 'Indexed');\n      });\n\n      it('should revert when providing invalid pagination indexes', async () => {\n        await expectIndexedAttestations(uids);\n\n        const receivedAttestationsCount = await indexer.getReceivedAttestationUIDCount(\n          await recipient.getAddress(),\n          schemaId\n        );\n        await expect(\n          indexer.getReceivedAttestationUIDs(\n            await recipient.getAddress(),\n            schemaId,\n            receivedAttestationsCount + 1n,\n            receivedAttestationsCount,\n            false\n          )\n        ).to.be.revertedWithCustomError(indexer, 'InvalidOffset');\n\n        const sentAttestationCount = await indexer.getSentAttestationUIDCount(await sender.getAddress(), schemaId);\n        await expect(\n          indexer.getSentAttestationUIDs(\n            await sender.getAddress(),\n            schemaId,\n            sentAttestationCount + 1n,\n            sentAttestationCount,\n            false\n          )\n        ).to.be.revertedWithCustomError(indexer, 'InvalidOffset');\n\n        const schemaAttesterRecipientAttestationCount = await indexer.getSchemaAttesterRecipientAttestationUIDCount(\n          schemaId,\n          await sender.getAddress(),\n          await recipient.getAddress()\n        );\n        await expect(\n          indexer.getSchemaAttesterRecipientAttestationUIDs(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress(),\n            schemaAttesterRecipientAttestationCount + 1n,\n            schemaAttesterRecipientAttestationCount,\n            false\n          )\n        ).to.be.revertedWithCustomError(indexer, 'InvalidOffset');\n\n        const schemaAttestationsCount = await indexer.getSchemaAttestationUIDCount(schemaId);\n        await expect(\n          indexer.getSchemaAttestationUIDs(schemaId, schemaAttestationsCount + 1n, schemaAttestationsCount, false)\n        ).to.be.revertedWithCustomError(indexer, 'InvalidOffset');\n      });\n\n      it('should adapt the length of the query if it is too long', async () => {\n        await expectIndexedAttestations(uids);\n\n        const receivedAttestationsCount = await indexer.getReceivedAttestationUIDCount(\n          await recipient.getAddress(),\n          schemaId\n        );\n\n        expect(\n          await indexer.getReceivedAttestationUIDs(\n            await recipient.getAddress(),\n            schemaId,\n            0,\n            receivedAttestationsCount + 100n,\n            false\n          )\n        ).to.deep.equal(\n          await indexer.getReceivedAttestationUIDs(\n            await recipient.getAddress(),\n            schemaId,\n            0,\n            receivedAttestationsCount,\n            false\n          )\n        );\n\n        const sentAttestationCount = await indexer.getSentAttestationUIDCount(await recipient.getAddress(), schemaId);\n        expect(\n          await indexer.getSentAttestationUIDs(\n            await recipient.getAddress(),\n            schemaId,\n            0,\n            sentAttestationCount + 100n,\n            false\n          )\n        ).to.deep.equal(\n          await indexer.getSentAttestationUIDs(await recipient.getAddress(), schemaId, 0, sentAttestationCount, false)\n        );\n\n        const schemaAttesterRecipientAttestationCount = await indexer.getSchemaAttesterRecipientAttestationUIDCount(\n          schemaId,\n          await sender.getAddress(),\n          await recipient.getAddress()\n        );\n        expect(\n          await indexer.getSchemaAttesterRecipientAttestationUIDs(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress(),\n            0,\n            schemaAttesterRecipientAttestationCount + 100n,\n            false\n          )\n        ).to.deep.equal(\n          await indexer.getSchemaAttesterRecipientAttestationUIDs(\n            schemaId,\n            await sender.getAddress(),\n            await recipient.getAddress(),\n            0,\n            schemaAttesterRecipientAttestationCount,\n            false\n          )\n        );\n\n        const schemaAttestationsCount = await indexer.getSchemaAttestationUIDCount(schemaId);\n        expect(\n          await indexer.getSchemaAttestationUIDs(\n            schemaId,\n\n            0,\n            schemaAttestationsCount + 100n,\n            false\n          )\n        ).to.deep.equal(\n          await indexer.getSchemaAttestationUIDs(\n            schemaId,\n\n            0,\n            schemaAttestationsCount,\n            false\n          )\n        );\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/SchemaRegistry.ts",
    "content": "import { encodeBytes32String, Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../components/Contracts';\nimport { SchemaRegistry } from '../typechain-types';\nimport { ZERO_ADDRESS, ZERO_BYTES, ZERO_BYTES32 } from '../utils/Constants';\nimport { getSchemaUID } from '../utils/EAS';\nimport { expect } from './helpers/Chai';\n\ndescribe('SchemaRegistry', () => {\n  let accounts: Signer[];\n\n  let registry: SchemaRegistry;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n  });\n\n  beforeEach(async () => {\n    registry = await Contracts.SchemaRegistry.deploy();\n  });\n\n  describe('construction', () => {\n    it('should report a version', async () => {\n      expect(await registry.version()).to.equal('1.4.0');\n    });\n  });\n\n  describe('registration', () => {\n    const testRegister = async (schema: string, resolver: string | Signer, revocable: boolean) => {\n      const resolverAddress = typeof resolver === 'string' ? resolver : await resolver.getAddress();\n\n      const uid = getSchemaUID(schema, resolverAddress, revocable);\n\n      const retUID = await registry.register.staticCall(schema, resolverAddress, revocable);\n      const res = await registry.register(schema, resolverAddress, revocable);\n      expect(retUID).to.equal(uid);\n\n      const schemaRecord = await registry.getSchema(uid);\n      const sender = accounts[0];\n\n      await expect(res)\n        .to.emit(registry, 'Registered')\n        .withArgs(uid, await sender.getAddress(), schemaRecord);\n\n      expect(schemaRecord.uid).to.equal(uid);\n      expect(schemaRecord.schema).to.equal(schema);\n      expect(schemaRecord.resolver).to.equal(resolverAddress);\n      expect(schemaRecord.revocable).to.equal(revocable);\n    };\n\n    it('should allow to register a schema', async () => {\n      await testRegister('bool like', accounts[3], true);\n      await testRegister('bytes32 proposalId, bool vote', accounts[3], false);\n    });\n\n    it('should allow to register a schema without a schema', async () => {\n      await testRegister(ZERO_BYTES, accounts[3], true);\n    });\n\n    it('should allow to register a schema without a resolver', async () => {\n      await testRegister('bool hasPhoneNumber, bytes32 phoneHash', ZERO_ADDRESS, true);\n    });\n\n    it('should allow to register a schema without neither a schema or a resolver', async () => {\n      await testRegister(ZERO_BYTES, ZERO_ADDRESS, true);\n    });\n\n    it('should not allow to register the same schema and resolver twice', async () => {\n      const schema = 'bool isFriend';\n      await registry.register(schema, ZERO_ADDRESS, true);\n      await expect(registry.register(schema, ZERO_ADDRESS, true)).to.be.revertedWithCustomError(\n        registry,\n        'AlreadyExists'\n      );\n    });\n  });\n\n  describe('schema querying', () => {\n    it('should return a schema', async () => {\n      const schema = 'bool isFriend';\n      const resolver = accounts[5];\n\n      await registry.register(schema, await resolver.getAddress(), true);\n\n      const uid = getSchemaUID(schema, await resolver.getAddress(), true);\n      const schemaRecord = await registry.getSchema(uid);\n      expect(schemaRecord.uid).to.equal(uid);\n      expect(schemaRecord.schema).to.equal(schema);\n      expect(schemaRecord.resolver).to.equal(await resolver.getAddress());\n      expect(schemaRecord.revocable).to.equal(true);\n    });\n\n    it('should return an empty schema given non-existing id', async () => {\n      const schemaRecord = await registry.getSchema(encodeBytes32String('BAD'));\n      expect(schemaRecord.uid).to.equal(ZERO_BYTES32);\n      expect(schemaRecord.schema).to.equal('');\n      expect(schemaRecord.resolver).to.equal(ZERO_ADDRESS);\n      expect(schemaRecord.revocable).to.equal(false);\n    });\n  });\n});\n"
  },
  {
    "path": "test/eip1271/EIP1271Verifier.ts",
    "content": "import { expect } from 'chai';\nimport { encodeBytes32String, hexlify, keccak256, Signer, solidityPacked, toUtf8Bytes } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts, { TestEIP1271Signer } from '../../components/Contracts';\nimport { TestEIP1271Verifier } from '../../typechain-types';\nimport { NO_EXPIRATION, ZERO_BYTES, ZERO_BYTES32 } from '../../utils/Constants';\nimport { ATTEST_TYPED_SIGNATURE, EIP712Utils, REVOKE_TYPED_SIGNATURE } from '../helpers/EIP712Utils';\nimport { duration, latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\nconst EIP712_NAME = 'EAS';\n\ndescribe('EIP1271Verifier', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n\n  let verifier: TestEIP1271Verifier;\n  let eip712Utils: EIP712Utils;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    verifier = await Contracts.TestEIP1271Verifier.deploy(EIP712_NAME);\n\n    eip712Utils = await EIP712Utils.fromVerifier(verifier);\n  });\n\n  describe('construction', () => {\n    it('should be properly initialized', async () => {\n      expect(await verifier.getDomainSeparator()).to.equal(eip712Utils.getDomainSeparator(EIP712_NAME));\n      expect(await verifier.getAttestTypeHash()).to.equal(keccak256(toUtf8Bytes(ATTEST_TYPED_SIGNATURE)));\n      expect(await verifier.getRevokeTypeHash()).to.equal(keccak256(toUtf8Bytes(REVOKE_TYPED_SIGNATURE)));\n      expect(await verifier.getName()).to.equal(EIP712_NAME);\n    });\n  });\n\n  enum SignerType {\n    EOA = 'eoa',\n    Contract = 'contract'\n  }\n\n  for (const signerType of [SignerType.EOA, SignerType.Contract]) {\n    context(`by a ${signerType} signer`, () => {\n      let signer: Signer | TestEIP1271Signer;\n      let wrongSigner: Signer | TestEIP1271Signer;\n\n      beforeEach(async () => {\n        switch (signerType) {\n          case SignerType.EOA:\n            signer = await createWallet();\n            wrongSigner = await createWallet();\n\n            break;\n\n          case SignerType.Contract:\n            signer = await Contracts.TestEIP1271Signer.deploy();\n            wrongSigner = await Contracts.TestEIP1271Signer.deploy();\n\n            break;\n        }\n      });\n\n      describe('verify attest', () => {\n        interface AttestationRequestData {\n          recipient: string;\n          expirationTime: bigint;\n          revocable: boolean;\n          refUID: string;\n          data: string;\n          value: bigint;\n        }\n\n        const schema = ZERO_BYTES32;\n        const deadline = NO_EXPIRATION;\n        let attestationRequest: AttestationRequestData;\n\n        beforeEach(async () => {\n          attestationRequest = {\n            recipient: await recipient.getAddress(),\n            expirationTime: NO_EXPIRATION,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data: ZERO_BYTES,\n            value: 1000n\n          };\n        });\n\n        const signDelegatedAttestation = async (\n          signer: Signer | TestEIP1271Signer,\n          attestationRequest: AttestationRequestData\n        ) => {\n          const nonce = await verifier.getNonce(await signer.getAddress());\n\n          switch (signerType) {\n            case SignerType.EOA:\n              return eip712Utils.signDelegatedAttestation(\n                signer as Signer,\n                schema,\n                attestationRequest.recipient,\n                attestationRequest.expirationTime,\n                attestationRequest.revocable,\n                attestationRequest.refUID,\n                attestationRequest.data,\n                attestationRequest.value,\n                nonce,\n                deadline\n              );\n\n            case SignerType.Contract: {\n              const hash = await eip712Utils.hashDelegatedAttestation(\n                await signer.getAddress(),\n                schema,\n                attestationRequest.recipient,\n                attestationRequest.expirationTime,\n                attestationRequest.revocable,\n                attestationRequest.refUID,\n                attestationRequest.data,\n                attestationRequest.value,\n                nonce,\n                deadline\n              );\n\n              // Just a dummy signature\n              const signature = { s: hexlify(keccak256(`${hash}${await latest()}`)), r: hexlify(hash), v: 27 };\n              await (signer as TestEIP1271Signer).mockSignature(\n                hash,\n                solidityPacked(['bytes32', 'bytes32', 'uint8'], [signature.r, signature.s, signature.v])\n              );\n\n              return signature;\n            }\n          }\n        };\n\n        it('should verify delegated attestation request', async () => {\n          for (let i = 0; i < 3; ++i) {\n            const signature = await signDelegatedAttestation(signer, attestationRequest);\n\n            await expect(\n              verifier.verifyAttest({\n                schema,\n                data: attestationRequest,\n                signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n                attester: await signer.getAddress(),\n                deadline\n              })\n            ).not.to.be.reverted;\n          }\n        });\n\n        it('should revert when verifying delegated attestation request with an expired deadline', async () => {\n          const signature = await signDelegatedAttestation(signer, attestationRequest);\n\n          await expect(\n            verifier.verifyAttest({\n              schema,\n              data: attestationRequest,\n              signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n              attester: await signer.getAddress(),\n              deadline: (await latest()) - duration.hours(1n)\n            })\n          ).to.be.revertedWithCustomError(verifier, 'DeadlineExpired');\n        });\n\n        it('should revert when verifying delegated attestation request with a wrong signature', async () => {\n          const signature = await signDelegatedAttestation(signer, attestationRequest);\n\n          await expect(\n            verifier.verifyAttest({\n              schema,\n              data: attestationRequest,\n              signature: { v: signature.v, r: encodeBytes32String('BAD'), s: hexlify(signature.s) },\n              attester: await signer.getAddress(),\n              deadline\n            })\n          ).to.be.revertedWithCustomError(verifier, 'InvalidSignature');\n\n          await expect(\n            verifier.verifyAttest({\n              schema,\n              data: attestationRequest,\n              signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n              attester: await wrongSigner.getAddress(),\n              deadline\n            })\n          ).to.be.revertedWithCustomError(verifier, 'InvalidSignature');\n        });\n      });\n\n      describe('verify revoke', () => {\n        const schema = ZERO_BYTES32;\n        const deadline = NO_EXPIRATION;\n\n        interface RevocationRequestData {\n          uid: string;\n          value: bigint;\n        }\n\n        const revocationRequest: RevocationRequestData = {\n          uid: ZERO_BYTES32,\n          value: 1000n\n        };\n\n        const signDelegatedRevocation = async (\n          signer: Signer | TestEIP1271Signer,\n          revocationRequest: RevocationRequestData\n        ) => {\n          const nonce = await verifier.getNonce(await signer.getAddress());\n\n          switch (signerType) {\n            case SignerType.EOA:\n              return eip712Utils.signDelegatedRevocation(\n                signer as Signer,\n                schema,\n                revocationRequest.uid,\n                revocationRequest.value,\n                nonce,\n                deadline\n              );\n\n            case SignerType.Contract: {\n              const hash = await eip712Utils.hashDelegatedRevocation(\n                await signer.getAddress(),\n                schema,\n                revocationRequest.uid,\n                revocationRequest.value,\n                nonce,\n                deadline\n              );\n\n              // Just a dummy signature\n              const signature = { s: hexlify(keccak256(`${hash}${await latest()}`)), r: hexlify(hash), v: 27 };\n              await (signer as TestEIP1271Signer).mockSignature(\n                hash,\n                solidityPacked(['bytes32', 'bytes32', 'uint8'], [signature.r, signature.s, signature.v])\n              );\n\n              return signature;\n            }\n          }\n        };\n\n        it('should verify delegated revocation request', async () => {\n          for (let i = 0; i < 3; ++i) {\n            const signature = await signDelegatedRevocation(signer, revocationRequest);\n\n            await expect(\n              verifier.verifyRevoke({\n                schema,\n                data: revocationRequest,\n                signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n                revoker: await signer.getAddress(),\n                deadline\n              })\n            ).not.to.be.reverted;\n          }\n        });\n\n        it('should revert when verifying delegated attestation request with an expired deadline', async () => {\n          const signature = await signDelegatedRevocation(signer, revocationRequest);\n\n          await expect(\n            verifier.verifyRevoke({\n              schema,\n              data: revocationRequest,\n              signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n              revoker: await signer.getAddress(),\n              deadline: (await latest()) - duration.hours(1n)\n            })\n          ).to.be.revertedWithCustomError(verifier, 'DeadlineExpired');\n        });\n\n        it('should revert when verifying delegated revocation request with a wrong signature', async () => {\n          const signature = await signDelegatedRevocation(signer, revocationRequest);\n\n          await expect(\n            verifier.verifyRevoke({\n              schema,\n              data: revocationRequest,\n              signature: { v: signature.v, r: encodeBytes32String('BAD'), s: hexlify(signature.s) },\n              revoker: await signer.getAddress(),\n              deadline\n            })\n          ).to.be.revertedWithCustomError(verifier, 'InvalidSignature');\n\n          await expect(\n            verifier.verifyRevoke({\n              schema,\n              data: revocationRequest,\n              signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n              revoker: await wrongSigner.getAddress(),\n              deadline\n            })\n          ).to.be.revertedWithCustomError(verifier, 'InvalidSignature');\n        });\n      });\n\n      describe('increasing nonces', () => {\n        let user: Signer;\n\n        before(() => {\n          [user] = accounts;\n        });\n\n        const expectNonceIncrease = async (newNonce: bigint) => {\n          const oldNonce = await verifier.getNonce(await user.getAddress());\n          const res = await verifier.connect(user).increaseNonce(newNonce);\n\n          await expect(res).to.emit(verifier, 'NonceIncreased').withArgs(oldNonce, newNonce);\n\n          expect(await verifier.getNonce(await user.getAddress())).to.equal(newNonce);\n        };\n\n        it('should allow users to increase their nonces', async () => {\n          await expectNonceIncrease(100n);\n          await expectNonceIncrease(201n);\n        });\n\n        it('should revert when users attempt to decrease/keep their nonces', async () => {\n          // Increase the current nonce such that it doesn't start at 0.\n          const nonce = 100n;\n          await verifier.connect(user).increaseNonce(nonce);\n\n          await expect(verifier.connect(user).increaseNonce(nonce)).to.be.revertedWithCustomError(\n            verifier,\n            'InvalidNonce'\n          );\n          await expect(verifier.connect(user).increaseNonce(nonce - 5n)).to.be.revertedWithCustomError(\n            verifier,\n            'InvalidNonce'\n          );\n        });\n      });\n    });\n  }\n});\n"
  },
  {
    "path": "test/eip712/proxy/EIP712Proxy.ts",
    "content": "import { expect } from 'chai';\nimport { encodeBytes32String, hexlify, keccak256, Signer, toUtf8Bytes } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../../components/Contracts';\nimport { SchemaRegistry, TestEAS, TestEIP712Proxy } from '../../../typechain-types';\nimport { NO_EXPIRATION, ZERO_ADDRESS, ZERO_BYTES, ZERO_BYTES32 } from '../../../utils/Constants';\nimport { getSchemaUID } from '../../../utils/EAS';\nimport { expectAttestation, SignatureType } from '../../helpers/EAS';\nimport {\n  ATTEST_PROXY_TYPED_SIGNATURE,\n  EIP712ProxyUtils,\n  REVOKE_PROXY_TYPED_SIGNATURE\n} from '../../helpers/EIP712ProxyUtils';\nimport { latest } from '../../helpers/Time';\nimport { createWallet } from '../../helpers/Wallet';\n\nconst EIP712_PROXY_NAME = 'EIP712Proxy';\n\ndescribe('EIP712Proxy', () => {\n  let accounts: Signer[];\n  let sender: Signer;\n  let sender2: Signer;\n  let recipient: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let proxy: TestEIP712Proxy;\n  let eip712ProxyUtils: EIP712ProxyUtils;\n\n  const schema = 'bool like';\n  const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true);\n  const deadline = NO_EXPIRATION;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n    sender2 = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    proxy = await Contracts.TestEIP712Proxy.deploy(await eas.getAddress(), EIP712_PROXY_NAME);\n\n    eip712ProxyUtils = await EIP712ProxyUtils.fromProxy(proxy);\n\n    await registry.register(schema, ZERO_ADDRESS, true);\n  });\n\n  describe('construction', () => {\n    it('should revert when initialized with an empty schema registry', async () => {\n      await expect(Contracts.TestEIP712Proxy.deploy(ZERO_ADDRESS, EIP712_PROXY_NAME)).to.be.revertedWithCustomError(\n        proxy,\n        'InvalidEAS'\n      );\n    });\n\n    it('should be properly initialized', async () => {\n      expect(await proxy.version()).to.equal('1.4.0');\n\n      expect(await proxy.getEAS()).to.equal(await eas.getAddress());\n      expect(await proxy.getDomainSeparator()).to.equal(eip712ProxyUtils.getDomainSeparator(EIP712_PROXY_NAME));\n      expect(await proxy.getAttestTypeHash()).to.equal(keccak256(toUtf8Bytes(ATTEST_PROXY_TYPED_SIGNATURE)));\n      expect(await proxy.getRevokeTypeHash()).to.equal(keccak256(toUtf8Bytes(REVOKE_PROXY_TYPED_SIGNATURE)));\n      expect(await proxy.getName()).to.equal(EIP712_PROXY_NAME);\n    });\n  });\n\n  describe('verify attest', () => {\n    it('should verify delegated attestation request', async () => {\n      const attestationRequest = {\n        recipient: await recipient.getAddress(),\n        expirationTime: NO_EXPIRATION,\n        revocable: true,\n        refUID: ZERO_BYTES32,\n        data: ZERO_BYTES,\n        value: 1000n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n        sender,\n        schemaId,\n        attestationRequest.recipient,\n        attestationRequest.expirationTime,\n        attestationRequest.revocable,\n        attestationRequest.refUID,\n        attestationRequest.data,\n        attestationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.verifyAttest({\n          schema: schemaId,\n          data: attestationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          attester: await sender.getAddress(),\n          deadline\n        })\n      ).not.to.be.reverted;\n    });\n\n    it('should revert when verifying delegated attestation request with a wrong signature', async () => {\n      const attestationRequest = {\n        recipient: await recipient.getAddress(),\n        expirationTime: NO_EXPIRATION,\n        revocable: true,\n        refUID: ZERO_BYTES32,\n        data: ZERO_BYTES,\n        value: 1000n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n        sender,\n        schemaId,\n        attestationRequest.recipient,\n        attestationRequest.expirationTime,\n        attestationRequest.revocable,\n        attestationRequest.refUID,\n        attestationRequest.data,\n        attestationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.verifyAttest({\n          schema: schemaId,\n          data: attestationRequest,\n          signature: { v: signature.v, r: encodeBytes32String('BAD'), s: hexlify(signature.s) },\n          attester: await sender.getAddress(),\n          deadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'InvalidSignature');\n\n      await expect(\n        proxy.verifyAttest({\n          schema: schemaId,\n          data: attestationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          attester: await sender2.getAddress(),\n          deadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'InvalidSignature');\n    });\n\n    it('should revert when verifying delegated attestation request with a used signature', async () => {\n      const attestationRequest = {\n        recipient: await recipient.getAddress(),\n        expirationTime: NO_EXPIRATION,\n        revocable: true,\n        refUID: ZERO_BYTES32,\n        data: ZERO_BYTES,\n        value: 1000n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n        sender,\n        schemaId,\n        attestationRequest.recipient,\n        attestationRequest.expirationTime,\n        attestationRequest.revocable,\n        attestationRequest.refUID,\n        attestationRequest.data,\n        attestationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.verifyAttest({\n          schema: schemaId,\n          data: attestationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          attester: await sender.getAddress(),\n          deadline\n        })\n      ).not.to.be.reverted;\n\n      await expect(\n        proxy.verifyAttest({\n          schema: schemaId,\n          data: attestationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          attester: await sender.getAddress(),\n          deadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'UsedSignature');\n    });\n\n    it('should revert when verifying delegated attestation request with an expired deadline', async () => {\n      const attestationRequest = {\n        recipient: await recipient.getAddress(),\n        expirationTime: NO_EXPIRATION,\n        revocable: true,\n        refUID: ZERO_BYTES32,\n        data: ZERO_BYTES,\n        value: 1000n\n      };\n\n      const expiredDeadline = 1n;\n      const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n        sender,\n        schemaId,\n        attestationRequest.recipient,\n        attestationRequest.expirationTime,\n        attestationRequest.revocable,\n        attestationRequest.refUID,\n        attestationRequest.data,\n        attestationRequest.value,\n        expiredDeadline\n      );\n\n      await expect(\n        proxy.verifyAttest({\n          schema: schemaId,\n          data: attestationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          attester: await sender.getAddress(),\n          deadline: expiredDeadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'DeadlineExpired');\n    });\n\n    it('should revert when multi delegation attesting with inconsistent input lengths', async () => {\n      await expect(\n        proxy.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: NO_EXPIRATION,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: NO_EXPIRATION,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              }\n            ],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('BAD'),\n                s: encodeBytes32String('BAD')\n              }\n            ],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        proxy.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('BAD'),\n                s: encodeBytes32String('BAD')\n              }\n            ],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        proxy.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: NO_EXPIRATION,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              }\n            ],\n            signatures: [\n              {\n                v: 28,\n                r: encodeBytes32String('1'),\n                s: encodeBytes32String('2')\n              },\n              {\n                v: 28,\n                r: encodeBytes32String('3'),\n                s: encodeBytes32String('4')\n              }\n            ],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n      await expect(\n        proxy.multiAttestByDelegation([\n          {\n            schema: schemaId,\n            data: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: NO_EXPIRATION,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime: NO_EXPIRATION,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data: ZERO_BYTES32,\n                value: 0\n              }\n            ],\n            signatures: [],\n            attester: await sender.getAddress(),\n            deadline: NO_EXPIRATION\n          }\n        ])\n      ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n    });\n  });\n\n  describe('verify revoke', () => {\n    let uid: string;\n\n    beforeEach(async () => {\n      ({ uid } = await expectAttestation(\n        { eas, eip712ProxyUtils },\n        schemaId,\n        { recipient: ZERO_ADDRESS, expirationTime: NO_EXPIRATION, data: ZERO_BYTES },\n        { signatureType: SignatureType.DelegatedProxy, from: sender }\n      ));\n    });\n\n    it('should verify delegated revocation request', async () => {\n      const revocationRequest = {\n        uid,\n        value: 1000n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n        sender,\n        schemaId,\n        revocationRequest.uid,\n        revocationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.connect(sender).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          revoker: await sender.getAddress(),\n          deadline\n        })\n      ).not.to.be.reverted;\n    });\n\n    it('should verify delegated revocation request sent from a different account', async () => {\n      const revocationRequest = {\n        uid,\n        value: 0n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n        sender,\n        schemaId,\n        revocationRequest.uid,\n        revocationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.connect(sender2).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          revoker: await sender.getAddress(),\n          deadline\n        })\n      ).not.to.be.reverted;\n    });\n\n    it('should revert when verifying delegated revocation request with a wrong signature', async () => {\n      const revocationRequest = {\n        uid,\n        value: 1000n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n        sender,\n        schemaId,\n        revocationRequest.uid,\n        revocationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.connect(sender).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: encodeBytes32String('BAD'), s: hexlify(signature.s) },\n          revoker: await sender.getAddress(),\n          deadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'InvalidSignature');\n    });\n\n    it('should revert when verifying delegated revocation request with a used signature', async () => {\n      const revocationRequest = {\n        uid,\n        value: 1000n\n      };\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n        sender,\n        schemaId,\n        revocationRequest.uid,\n        revocationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.connect(sender).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          revoker: await sender.getAddress(),\n          deadline\n        })\n      ).not.to.be.reverted;\n\n      await expect(\n        proxy.connect(sender).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          revoker: await sender.getAddress(),\n          deadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'UsedSignature');\n    });\n\n    it('should revert when verifying delegated revocation request with an expired deadline', async () => {\n      const revocationRequest = {\n        uid,\n        value: 1000n\n      };\n\n      const expiredDeadline = 1n;\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n        sender,\n        schemaId,\n        revocationRequest.uid,\n        revocationRequest.value,\n        expiredDeadline\n      );\n\n      await expect(\n        proxy.connect(sender).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          revoker: await sender.getAddress(),\n          deadline: expiredDeadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'DeadlineExpired');\n    });\n\n    it('should revert when verifying delegated revocation request from a different account', async () => {\n      const revocationRequest = {\n        uid,\n        value: 1000n\n      };\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n        sender2,\n        schemaId,\n        revocationRequest.uid,\n        revocationRequest.value,\n        deadline\n      );\n\n      await expect(\n        proxy.connect(sender2).verifyRevoke({\n          schema: schemaId,\n          data: revocationRequest,\n          signature: { v: signature.v, r: hexlify(signature.r), s: hexlify(signature.s) },\n          revoker: await sender2.getAddress(),\n          deadline\n        })\n      ).to.be.revertedWithCustomError(proxy, 'AccessDenied');\n    });\n  });\n\n  it('should revert when multi delegation revoking with inconsistent input lengths', async () => {\n    const uid = ZERO_BYTES32;\n    const uid2 = ZERO_BYTES32;\n\n    await expect(\n      proxy.multiRevokeByDelegation([\n        {\n          schema: schemaId,\n          data: [\n            { uid, value: 0 },\n            { uid: uid2, value: 0 }\n          ],\n          signatures: [\n            {\n              v: 28,\n              r: encodeBytes32String('1'),\n              s: encodeBytes32String('2')\n            }\n          ],\n          revoker: await sender.getAddress(),\n          deadline: NO_EXPIRATION\n        }\n      ])\n    ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n    await expect(\n      proxy.multiRevokeByDelegation([\n        {\n          schema: schemaId,\n          data: [],\n          signatures: [\n            {\n              v: 28,\n              r: encodeBytes32String('1'),\n              s: encodeBytes32String('2')\n            }\n          ],\n          revoker: await sender.getAddress(),\n          deadline: NO_EXPIRATION\n        }\n      ])\n    ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n    await expect(\n      proxy.multiRevokeByDelegation([\n        {\n          schema: schemaId,\n          data: [{ uid, value: 0 }],\n          signatures: [\n            {\n              v: 28,\n              r: encodeBytes32String('1'),\n              s: encodeBytes32String('2')\n            },\n            {\n              v: 28,\n              r: encodeBytes32String('3'),\n              s: encodeBytes32String('4')\n            }\n          ],\n          revoker: await sender.getAddress(),\n          deadline: NO_EXPIRATION\n        }\n      ])\n    ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n\n    await expect(\n      eas.multiRevokeByDelegation([\n        {\n          schema: schemaId,\n          data: [\n            { uid, value: 0 },\n            { uid: uid2, value: 0 }\n          ],\n          signatures: [],\n          revoker: await sender.getAddress(),\n          deadline: NO_EXPIRATION\n        }\n      ])\n    ).to.be.revertedWithCustomError(eas, 'InvalidLength');\n  });\n});\n"
  },
  {
    "path": "test/eip712/proxy/PermissionedEIP712Proxy.ts",
    "content": "import { expect } from 'chai';\nimport { encodeBytes32String, keccak256, Signer, toUtf8Bytes } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../../components/Contracts';\nimport { PermissionedEIP712Proxy, SchemaRegistry, TestEAS } from '../../../typechain-types';\nimport { NO_EXPIRATION, ZERO_ADDRESS, ZERO_BYTES } from '../../../utils/Constants';\nimport { getSchemaUID } from '../../../utils/EAS';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectFailedMultiRevocations,\n  expectFailedRevocation,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  SignatureType\n} from '../../helpers/EAS';\nimport {\n  ATTEST_PROXY_TYPED_SIGNATURE,\n  EIP712ProxyUtils,\n  REVOKE_PROXY_TYPED_SIGNATURE\n} from '../../helpers/EIP712ProxyUtils';\nimport { latest } from '../../helpers/Time';\nimport { createWallet } from '../../helpers/Wallet';\n\nconst PERMISSIONED_EIP712_PROXY_NAME = 'PermissionedEIP712Proxy';\n\ndescribe('PermissionedEIP712Proxy', () => {\n  let accounts: Signer[];\n  let owner: Signer;\n  let nonOwner: Signer;\n  let recipient: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let proxy: PermissionedEIP712Proxy;\n  let eip712ProxyUtils: EIP712ProxyUtils;\n\n  const schema = 'bool like';\n  const schemaId = getSchemaUID(schema, ZERO_ADDRESS, true);\n  const expirationTime = NO_EXPIRATION;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    owner = await createWallet();\n    nonOwner = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    proxy = await Contracts.connect(owner).PermissionedEIP712Proxy.deploy(\n      await eas.getAddress(),\n      PERMISSIONED_EIP712_PROXY_NAME\n    );\n\n    eip712ProxyUtils = await EIP712ProxyUtils.fromProxy(proxy);\n\n    await registry.register(schema, ZERO_ADDRESS, true);\n  });\n\n  describe('construction', () => {\n    it('should be properly initialized', async () => {\n      expect(await proxy.version()).to.equal('1.4.0');\n\n      expect(await proxy.getDomainSeparator()).to.equal(\n        eip712ProxyUtils.getDomainSeparator(PERMISSIONED_EIP712_PROXY_NAME)\n      );\n      expect(await proxy.getAttestTypeHash()).to.equal(keccak256(toUtf8Bytes(ATTEST_PROXY_TYPED_SIGNATURE)));\n      expect(await proxy.getRevokeTypeHash()).to.equal(keccak256(toUtf8Bytes(REVOKE_PROXY_TYPED_SIGNATURE)));\n      expect(await proxy.getName()).to.equal(PERMISSIONED_EIP712_PROXY_NAME);\n    });\n  });\n\n  describe('attest', () => {\n    it('should allow the owner to attest', async () => {\n      await expectAttestation(\n        { eas, eip712ProxyUtils },\n        schemaId,\n        { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('0') },\n        { signatureType: SignatureType.DelegatedProxy, from: owner }\n      );\n\n      await expectMultiAttestations(\n        { eas, eip712ProxyUtils },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('1') },\n              { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('2') }\n            ]\n          }\n        ],\n        { signatureType: SignatureType.DelegatedProxy, from: owner }\n      );\n    });\n\n    it('should revert when a non-owner attempts to attest', async () => {\n      await expectFailedAttestation(\n        { eas, eip712ProxyUtils },\n        schemaId,\n        { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('0') },\n        { signatureType: SignatureType.DelegatedProxy, from: nonOwner },\n        'AccessDenied'\n      );\n\n      await expectFailedMultiAttestations(\n        { eas, eip712ProxyUtils },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('1') },\n              { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String('2') }\n            ]\n          }\n        ],\n        { signatureType: SignatureType.DelegatedProxy, from: nonOwner },\n        'AccessDenied'\n      );\n    });\n  });\n\n  describe('revoke', () => {\n    let uid: string;\n    let uids: string[] = [];\n\n    beforeEach(async () => {\n      ({ uid } = await expectAttestation(\n        { eas, eip712ProxyUtils },\n        schemaId,\n        { recipient: await recipient.getAddress(), expirationTime: NO_EXPIRATION, data: ZERO_BYTES },\n        { signatureType: SignatureType.DelegatedProxy, from: owner }\n      ));\n\n      uids = [];\n\n      for (let i = 0; i < 2; i++) {\n        const { uid: newUID } = await expectAttestation(\n          { eas, eip712ProxyUtils },\n          schemaId,\n          { recipient: await recipient.getAddress(), expirationTime, data: encodeBytes32String((i + 1).toString()) },\n          { signatureType: SignatureType.DelegatedProxy, from: owner }\n        );\n\n        uids.push(newUID);\n      }\n    });\n\n    it('should allow the owner to revoke', async () => {\n      await expectRevocation(\n        { eas, eip712ProxyUtils },\n        schemaId,\n        { uid },\n        { signatureType: SignatureType.DelegatedProxy, from: owner }\n      );\n\n      await expectMultiRevocations(\n        { eas, eip712ProxyUtils },\n        [\n          {\n            schema: schemaId,\n            requests: uids.map((uid) => ({ uid }))\n          }\n        ],\n        { signatureType: SignatureType.DelegatedProxy, from: owner }\n      );\n    });\n\n    it('should revert when a non-owner attempts to revoke', async () => {\n      await expectFailedRevocation(\n        { eas, eip712ProxyUtils },\n        schemaId,\n        { uid },\n        { signatureType: SignatureType.DelegatedProxy, from: nonOwner },\n        'AccessDenied'\n      );\n\n      await expectFailedMultiRevocations(\n        { eas, eip712ProxyUtils },\n        [\n          {\n            schema: schemaId,\n            requests: uids.map((uid) => ({ uid }))\n          }\n        ],\n        { signatureType: SignatureType.DelegatedProxy, from: nonOwner },\n        'AccessDenied'\n      );\n    });\n  });\n});\n"
  },
  {
    "path": "test/helpers/Chai.ts",
    "content": "import chai from 'chai';\nimport chaiBigInt from 'chai-bigint';\n\nchai.use(chaiBigInt);\n\nexport const { expect } = chai;\n\nexport default chai;\n"
  },
  {
    "path": "test/helpers/EAS.ts",
    "content": "import { expect } from 'chai';\nimport { BaseContract, hexlify, Signer, TransactionResponse } from 'ethers';\nimport { SchemaRegistry, SchemaResolver, TestEAS } from '../../typechain-types';\nimport {\n  MultiDelegatedProxyAttestationRequestStruct,\n  MultiDelegatedProxyRevocationRequestStruct\n} from '../../typechain-types/contracts/eip712/proxy/EIP712Proxy';\nimport {\n  AttestationStructOutput,\n  MultiDelegatedAttestationRequestStruct,\n  MultiDelegatedRevocationRequestStruct\n} from '../../typechain-types/contracts/IEAS';\nimport { NO_EXPIRATION, ZERO_BYTES32 } from '../../utils/Constants';\nimport {\n  getSchemaUID,\n  getUIDFromAttestTx,\n  getUIDFromDelegatedProxyAttestTx,\n  getUIDFromMultiDelegatedProxyAttestTx,\n  getUIDsFromMultiAttestTx\n} from '../../utils/EAS';\nimport { EIP712ProxyUtils } from './EIP712ProxyUtils';\nimport {\n  EIP712AttestationParams,\n  EIP712MessageTypes,\n  EIP712Request,\n  EIP712RevocationParams,\n  EIP712Utils\n} from './EIP712Utils';\nimport { getTransactionCost } from './Transaction';\nimport { getBalance } from './Wallet';\n\nexport const registerSchema = async (\n  schema: string,\n  registry: SchemaRegistry,\n  resolver: SchemaResolver | string,\n  revocable: boolean\n) => {\n  const address = typeof resolver === 'string' ? resolver : await resolver.getAddress();\n  await registry.register(schema, address, revocable);\n\n  return getSchemaUID(schema, address, revocable);\n};\n\nexport enum SignatureType {\n  Direct = 'direct',\n  Delegated = 'delegated',\n  DelegatedProxy = 'delegated-proxy'\n}\n\nexport interface RequestContracts {\n  eas: TestEAS;\n  eip712Utils?: EIP712Utils;\n  eip712ProxyUtils?: EIP712ProxyUtils;\n}\n\nexport interface AttestationOptions {\n  signatureType?: SignatureType;\n  from: Signer;\n  deadline?: bigint;\n  value?: bigint;\n  bump?: number;\n  skipBalanceCheck?: boolean;\n}\n\nexport interface AttestationRequestData {\n  recipient: string;\n  expirationTime: bigint;\n  revocable?: boolean;\n  refUID?: string;\n  data?: any;\n  value?: bigint;\n}\n\nexport interface MultiAttestationRequest {\n  schema: string;\n  requests: AttestationRequestData[];\n}\n\nexport interface RevocationOptions {\n  signatureType?: SignatureType;\n  from: Signer;\n  deadline?: bigint;\n  value?: bigint;\n  skipBalanceCheck?: boolean;\n}\n\nexport interface RevocationRequestData {\n  uid: string;\n  value?: bigint;\n}\n\nexport interface MultiRevocationRequest {\n  schema: string;\n  requests: RevocationRequestData[];\n}\n\nexport const expectAttestation = async (\n  contracts: RequestContracts,\n  schema: string,\n  request: AttestationRequestData,\n  options: AttestationOptions\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n  const {\n    recipient,\n    expirationTime,\n    revocable = true,\n    refUID = ZERO_BYTES32,\n    data = ZERO_BYTES32,\n    value = 0n\n  } = request;\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const prevBalance: bigint = await getBalance(await txSender.getAddress());\n\n  const msgValue = options.value ?? value;\n  let uid;\n\n  let res: TransactionResponse;\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      const args = [\n        { schema, data: { recipient, expirationTime, revocable, refUID, data, value } },\n        { value: msgValue }\n      ] as const;\n\n      const returnedUID = await eas.connect(txSender).attest.staticCall(...args);\n      res = await eas.connect(txSender).attest(...args);\n      uid = await getUIDFromAttestTx(res);\n      expect(uid).to.equal(returnedUID);\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const signature = await eip712Utils.signDelegatedAttestation(\n        txSender,\n        schema,\n        recipient,\n        expirationTime,\n        revocable,\n        refUID,\n        data,\n        msgValue,\n        await eas.getNonce(await txSender.getAddress()),\n        deadline\n      );\n\n      expect(await eip712Utils.verifyDelegatedAttestationSignature(await txSender.getAddress(), signature)).to.be.true;\n\n      const args = [\n        {\n          schema,\n          data: { recipient, expirationTime, revocable, refUID, data, value },\n          signature: {\n            v: signature.v,\n            r: hexlify(signature.r),\n            s: hexlify(signature.s)\n          },\n          attester: await txSender.getAddress(),\n          deadline\n        },\n        {\n          value: msgValue\n        }\n      ] as const;\n\n      const returnedUID = await eas.connect(txSender).attestByDelegation.staticCall(...args);\n      res = await eas.connect(txSender).attestByDelegation(...args);\n\n      uid = await getUIDFromAttestTx(res);\n      expect(uid).to.equal(returnedUID);\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n        txSender,\n        schema,\n        recipient,\n        expirationTime,\n        revocable,\n        refUID,\n        data,\n        msgValue,\n        deadline\n      );\n\n      expect(await eip712ProxyUtils.verifyDelegatedProxyAttestationSignature(await txSender.getAddress(), signature)).to\n        .be.true;\n\n      const args = [\n        {\n          schema,\n          data: { recipient, expirationTime, revocable, refUID, data, value },\n          signature: {\n            v: signature.v,\n            r: hexlify(signature.r),\n            s: hexlify(signature.s)\n          },\n          attester: await txSender.getAddress(),\n          deadline\n        },\n        {\n          value: msgValue\n        }\n      ] as const;\n\n      const returnedUID = await eip712ProxyUtils.proxy.connect(txSender).attestByDelegation.staticCall(...args);\n      res = await eip712ProxyUtils.proxy.connect(txSender).attestByDelegation(...args);\n\n      uid = await getUIDFromDelegatedProxyAttestTx(res);\n      expect(uid).to.equal(returnedUID);\n\n      expect(await eip712ProxyUtils.proxy.getAttester(uid)).to.equal(await txSender.getAddress());\n\n      break;\n    }\n  }\n\n  if (!options.skipBalanceCheck) {\n    const transactionCost = await getTransactionCost(res);\n\n    expect(await getBalance(await txSender.getAddress())).to.equal(prevBalance - value - transactionCost);\n  }\n\n  const attester =\n    signatureType !== SignatureType.DelegatedProxy\n      ? await txSender.getAddress()\n      : await eip712ProxyUtils?.proxy.getAddress();\n\n  await expect(res).to.emit(eas, 'Attested').withArgs(recipient, attester, uid, schema);\n\n  expect(await eas.isAttestationValid(uid)).to.be.true;\n\n  const attestation = await eas.getAttestation(uid);\n  expect(attestation.uid).to.equal(uid);\n  expect(attestation.schema).to.equal(schema);\n  expect(attestation.recipient).to.equal(recipient);\n  expect(attestation.attester).to.equal(attester);\n  expect(attestation.time).to.equal(await eas.getTime());\n  expect(attestation.expirationTime).to.equal(expirationTime);\n  expect(attestation.revocationTime).to.equal(0);\n  expect(attestation.revocable).to.equal(revocable);\n  expect(attestation.refUID).to.equal(refUID);\n  expect(attestation.data).to.equal(data);\n\n  return { uid, res };\n};\n\nexport const expectFailedAttestation = async (\n  contracts: RequestContracts,\n  schema: string,\n  request: AttestationRequestData,\n  options: AttestationOptions,\n  err: string,\n  contract?: BaseContract\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n  const {\n    recipient,\n    expirationTime,\n    revocable = true,\n    refUID = ZERO_BYTES32,\n    data = ZERO_BYTES32,\n    value = 0n\n  } = request;\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const msgValue = options.value ?? value;\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      await expect(\n        eas.connect(txSender).attest(\n          { schema, data: { recipient, expirationTime, revocable, refUID, data, value } },\n          {\n            value: msgValue\n          }\n        )\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const signature = await eip712Utils.signDelegatedAttestation(\n        txSender,\n        schema,\n        recipient,\n        expirationTime,\n        revocable,\n        refUID,\n        data,\n        msgValue,\n        await eas.getNonce(await txSender.getAddress()),\n        deadline\n      );\n\n      expect(await eip712Utils.verifyDelegatedAttestationSignature(await txSender.getAddress(), signature)).to.be.true;\n\n      await expect(\n        eas.connect(txSender).attestByDelegation(\n          {\n            schema,\n            data: {\n              recipient,\n              expirationTime,\n              revocable,\n              refUID,\n              data,\n              value\n            },\n            signature: {\n              v: signature.v,\n              r: hexlify(signature.r),\n              s: hexlify(signature.s)\n            },\n            attester: await txSender.getAddress(),\n            deadline\n          },\n          { value: msgValue }\n        )\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n        txSender,\n        schema,\n        recipient,\n        expirationTime,\n        revocable,\n        refUID,\n        data,\n        msgValue,\n        deadline\n      );\n\n      expect(await eip712ProxyUtils.verifyDelegatedProxyAttestationSignature(await txSender.getAddress(), signature)).to\n        .be.true;\n\n      await expect(\n        eip712ProxyUtils.proxy.connect(txSender).attestByDelegation(\n          {\n            schema,\n            data: {\n              recipient,\n              expirationTime,\n              revocable,\n              refUID,\n              data,\n              value\n            },\n            signature: {\n              v: signature.v,\n              r: hexlify(signature.r),\n              s: hexlify(signature.s)\n            },\n            attester: await txSender.getAddress(),\n            deadline\n          },\n          { value: msgValue }\n        )\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n  }\n};\n\nexport const expectMultiAttestations = async (\n  contracts: RequestContracts,\n  requests: MultiAttestationRequest[],\n  options: AttestationOptions\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n\n  const multiAttestationRequests = requests.map((r) => ({\n    schema: r.schema,\n    data: r.requests.map((d) => ({\n      recipient: d.recipient,\n      expirationTime: d.expirationTime,\n      revocable: d.revocable ?? true,\n      refUID: d.refUID ?? ZERO_BYTES32,\n      data: d.data ?? ZERO_BYTES32,\n      value: d.value ?? 0n\n    }))\n  }));\n\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const prevBalance: bigint = await getBalance(await txSender.getAddress());\n\n  const requestedValue = multiAttestationRequests.reduce((res, { data }) => {\n    const total = data.reduce((res, r) => res + r.value, 0n);\n    return res + total;\n  }, 0n);\n  const msgValue = options.value ?? requestedValue;\n\n  let uids: string[] = [];\n  let res: TransactionResponse;\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      const args = [\n        multiAttestationRequests,\n        {\n          value: msgValue\n        }\n      ] as const;\n\n      const returnedUIDs = await eas.connect(txSender).multiAttest.staticCall(...args);\n      res = await eas.connect(txSender).multiAttest(...args);\n\n      uids = await getUIDsFromMultiAttestTx(res);\n      expect(uids).to.deep.equal(returnedUIDs);\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const multiDelegatedAttestationRequests: MultiDelegatedAttestationRequestStruct[] = [];\n\n      let nonce = await eas.getNonce(await txSender.getAddress());\n\n      for (const { schema, data } of multiAttestationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712AttestationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712Utils.signDelegatedAttestation(\n            txSender,\n            schema,\n            request.recipient,\n            request.expirationTime,\n            request.revocable,\n            request.refUID,\n            request.data,\n            msgValue,\n            nonce,\n            deadline\n          );\n\n          expect(await eip712Utils.verifyDelegatedAttestationSignature(await txSender.getAddress(), signature)).to.be\n            .true;\n\n          signatures.push(signature);\n\n          nonce++;\n        }\n\n        multiDelegatedAttestationRequests.push({\n          schema,\n          data,\n          signatures,\n          attester: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      const args = [multiDelegatedAttestationRequests, { value: msgValue }] as const;\n\n      const returnedUIDs = await eas.connect(txSender).multiAttestByDelegation.staticCall(...args);\n      res = await eas.connect(txSender).multiAttestByDelegation(...args);\n\n      uids = await getUIDsFromMultiAttestTx(res);\n      expect(uids).to.deep.equal(returnedUIDs);\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const multiDelegatedAttestationRequests: MultiDelegatedProxyAttestationRequestStruct[] = [];\n\n      for (const { schema, data } of multiAttestationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712AttestationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n            txSender,\n            schema,\n            request.recipient,\n            request.expirationTime,\n            request.revocable,\n            request.refUID,\n            request.data,\n            msgValue,\n            deadline\n          );\n\n          expect(\n            await eip712ProxyUtils.verifyDelegatedProxyAttestationSignature(await txSender.getAddress(), signature)\n          ).to.be.true;\n\n          signatures.push(signature);\n        }\n\n        multiDelegatedAttestationRequests.push({\n          schema,\n          data,\n          signatures,\n          attester: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      const args = [multiDelegatedAttestationRequests, { value: msgValue }] as const;\n\n      const returnedUIDs = await eip712ProxyUtils.proxy.connect(txSender).multiAttestByDelegation.staticCall(...args);\n      res = await eip712ProxyUtils.proxy.connect(txSender).multiAttestByDelegation(...args);\n\n      uids = await getUIDFromMultiDelegatedProxyAttestTx(res);\n      expect(uids).to.deep.equal(returnedUIDs);\n\n      for (const uid of uids) {\n        expect(await eip712ProxyUtils.proxy.getAttester(uid)).to.equal(await txSender.getAddress());\n      }\n\n      break;\n    }\n  }\n\n  if (!options.skipBalanceCheck) {\n    const transactionCost = await getTransactionCost(res);\n\n    expect(await getBalance(await txSender.getAddress())).to.equal(prevBalance - requestedValue - transactionCost);\n  }\n\n  let i = 0;\n  for (const { schema, data } of multiAttestationRequests) {\n    for (const request of data) {\n      const uid = uids[i++];\n\n      const attester =\n        signatureType !== SignatureType.DelegatedProxy\n          ? await txSender.getAddress()\n          : await eip712ProxyUtils?.proxy.getAddress();\n\n      await expect(res).to.emit(eas, 'Attested').withArgs(request.recipient, attester, uid, schema);\n\n      expect(await eas.isAttestationValid(uid)).to.be.true;\n\n      const attestation = await eas.getAttestation(uid);\n      expect(attestation.uid).to.equal(uid);\n      expect(attestation.schema).to.equal(schema);\n      expect(attestation.recipient).to.equal(request.recipient);\n      expect(attestation.attester).to.equal(attester);\n      expect(attestation.time).to.equal(await eas.getTime());\n      expect(attestation.expirationTime).to.equal(request.expirationTime);\n      expect(attestation.revocationTime).to.equal(0);\n      expect(attestation.revocable).to.equal(request.revocable);\n      expect(attestation.refUID).to.equal(request.refUID);\n      expect(attestation.data).to.equal(request.data);\n    }\n  }\n\n  return { uids, res };\n};\n\nexport const expectFailedMultiAttestations = async (\n  contracts: RequestContracts,\n  requests: MultiAttestationRequest[],\n  options: AttestationOptions,\n  err: string,\n  contract?: BaseContract\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const multiAttestationRequests = requests.map((r) => ({\n    schema: r.schema,\n    data: r.requests.map((d) => ({\n      recipient: d.recipient,\n      expirationTime: d.expirationTime,\n      revocable: d.revocable ?? true,\n      refUID: d.refUID ?? ZERO_BYTES32,\n      data: d.data ?? ZERO_BYTES32,\n      value: d.value ?? 0n\n    }))\n  }));\n\n  const msgValue =\n    options.value ??\n    multiAttestationRequests.reduce((res, { data }) => {\n      const total = data.reduce((res, r) => res + r.value, 0n);\n\n      return res + total;\n    }, 0n);\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      await expect(\n        eas.connect(txSender).multiAttest(multiAttestationRequests, {\n          value: msgValue\n        })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const multiDelegatedAttestationRequests: MultiDelegatedAttestationRequestStruct[] = [];\n\n      let nonce = await eas.getNonce(await txSender.getAddress());\n\n      for (const { schema, data } of multiAttestationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712AttestationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712Utils.signDelegatedAttestation(\n            txSender,\n            schema,\n            request.recipient,\n            request.expirationTime,\n            request.revocable,\n            request.refUID,\n            request.data,\n            msgValue,\n            nonce,\n            deadline\n          );\n\n          expect(await eip712Utils.verifyDelegatedAttestationSignature(await txSender.getAddress(), signature)).to.be\n            .true;\n\n          signatures.push(signature);\n\n          nonce++;\n        }\n\n        multiDelegatedAttestationRequests.push({\n          schema,\n          data,\n          signatures,\n          attester: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      await expect(\n        eas.connect(txSender).multiAttestByDelegation(multiDelegatedAttestationRequests, { value: msgValue })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const multiDelegatedAttestationRequests: MultiDelegatedProxyAttestationRequestStruct[] = [];\n\n      for (const { schema, data } of multiAttestationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712AttestationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712ProxyUtils.signDelegatedProxyAttestation(\n            txSender,\n            schema,\n            request.recipient,\n            request.expirationTime,\n            request.revocable,\n            request.refUID,\n            request.data,\n            msgValue,\n            deadline\n          );\n\n          expect(\n            await eip712ProxyUtils.verifyDelegatedProxyAttestationSignature(await txSender.getAddress(), signature)\n          ).to.be.true;\n\n          signatures.push(signature);\n        }\n\n        multiDelegatedAttestationRequests.push({\n          schema,\n          data,\n          signatures,\n          attester: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      await expect(\n        eip712ProxyUtils.proxy\n          .connect(txSender)\n          .multiAttestByDelegation(multiDelegatedAttestationRequests, { value: msgValue })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n  }\n};\n\nexport const expectRevocation = async (\n  contracts: RequestContracts,\n  schema: string,\n  request: RevocationRequestData,\n  options: RevocationOptions\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n  const { uid, value = 0n } = request;\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const msgValue = options.value ?? value;\n\n  const prevBalance: bigint = await getBalance(await txSender.getAddress());\n\n  const attestation = await eas.getAttestation(uid);\n\n  let res;\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      res = await eas.connect(txSender).revoke({ schema, data: { uid, value } }, { value: msgValue });\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const signature = await eip712Utils.signDelegatedRevocation(\n        txSender,\n        schema,\n        uid,\n        msgValue,\n        await eas.getNonce(await txSender.getAddress()),\n        deadline\n      );\n\n      expect(await eip712Utils.verifyDelegatedRevocationSignature(await txSender.getAddress(), signature)).to.be.true;\n\n      res = await eas.connect(txSender).revokeByDelegation(\n        {\n          schema,\n          data: { uid, value },\n          signature: {\n            v: signature.v,\n            r: hexlify(signature.r),\n            s: hexlify(signature.s)\n          },\n          revoker: await txSender.getAddress(),\n          deadline\n        },\n        { value: msgValue }\n      );\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(txSender, schema, uid, msgValue, deadline);\n\n      expect(await eip712ProxyUtils.verifyDelegatedProxyRevocationSignature(await txSender.getAddress(), signature)).to\n        .be.true;\n\n      res = await eip712ProxyUtils.proxy.connect(txSender).revokeByDelegation(\n        {\n          schema,\n          data: { uid, value },\n          signature: {\n            v: signature.v,\n            r: hexlify(signature.r),\n            s: hexlify(signature.s)\n          },\n          revoker: await txSender.getAddress(),\n          deadline\n        },\n        { value: msgValue }\n      );\n\n      break;\n    }\n  }\n\n  if (!options.skipBalanceCheck) {\n    const transactionCost = await getTransactionCost(res);\n\n    expect(await getBalance(await txSender.getAddress())).to.equal(prevBalance - value - transactionCost);\n  }\n\n  const attester =\n    signatureType !== SignatureType.DelegatedProxy\n      ? await txSender.getAddress()\n      : await eip712ProxyUtils?.proxy.getAddress();\n  await expect(res).to.emit(eas, 'Revoked').withArgs(attestation.recipient, attester, uid, attestation.schema);\n\n  const attestation2 = await eas.getAttestation(uid);\n  expect(attestation2.revocationTime).to.equal(await eas.getTime());\n\n  return res;\n};\n\nexport const expectMultiRevocations = async (\n  contracts: RequestContracts,\n  requests: MultiRevocationRequest[],\n  options: RevocationOptions\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n\n  const multiRevocationRequests = requests.map((r) => ({\n    schema: r.schema,\n    data: r.requests.map((d) => ({\n      uid: d.uid,\n      value: d.value ?? 0n\n    }))\n  }));\n\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const prevBalance: bigint = await getBalance(await txSender.getAddress());\n  const attestations: Record<string, AttestationStructOutput> = {};\n  for (const data of requests) {\n    for (const request of data.requests) {\n      attestations[request.uid] = await eas.getAttestation(request.uid);\n    }\n  }\n\n  const requestedValue = multiRevocationRequests.reduce((res, { data }) => {\n    const total = data.reduce((res, r) => res + r.value, 0n);\n\n    return res + total;\n  }, 0n);\n  const msgValue = options.value ?? requestedValue;\n\n  let res: TransactionResponse;\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      res = await eas.connect(txSender).multiRevoke(multiRevocationRequests, {\n        value: msgValue\n      });\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const multiDelegatedRevocationRequests: MultiDelegatedRevocationRequestStruct[] = [];\n\n      let nonce = await eas.getNonce(await txSender.getAddress());\n\n      for (const { schema, data } of multiRevocationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712RevocationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712Utils.signDelegatedRevocation(\n            txSender,\n            schema,\n            request.uid,\n            msgValue,\n            nonce,\n            deadline\n          );\n\n          expect(await eip712Utils.verifyDelegatedRevocationSignature(await txSender.getAddress(), signature)).to.be\n            .true;\n\n          signatures.push(signature);\n\n          nonce++;\n        }\n\n        multiDelegatedRevocationRequests.push({\n          schema,\n          data,\n          signatures,\n          revoker: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      res = await eas.connect(txSender).multiRevokeByDelegation(multiDelegatedRevocationRequests, { value: msgValue });\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const multiDelegatedRevocationRequests: MultiDelegatedProxyRevocationRequestStruct[] = [];\n\n      for (const { schema, data } of multiRevocationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712RevocationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n            txSender,\n            schema,\n            request.uid,\n            msgValue,\n            deadline\n          );\n\n          expect(await eip712ProxyUtils.verifyDelegatedProxyRevocationSignature(await txSender.getAddress(), signature))\n            .to.be.true;\n\n          signatures.push(signature);\n        }\n\n        multiDelegatedRevocationRequests.push({\n          schema,\n          data,\n          signatures,\n          revoker: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      res = await eip712ProxyUtils.proxy\n        .connect(txSender)\n        .multiRevokeByDelegation(multiDelegatedRevocationRequests, { value: msgValue });\n\n      break;\n    }\n  }\n\n  if (!options.skipBalanceCheck) {\n    const transactionCost = await getTransactionCost(res);\n\n    expect(await getBalance(await txSender.getAddress())).to.equal(prevBalance - requestedValue - transactionCost);\n  }\n\n  const attester =\n    signatureType !== SignatureType.DelegatedProxy\n      ? await txSender.getAddress()\n      : await eip712ProxyUtils?.proxy.getAddress();\n\n  for (const data of requests) {\n    for (const request of data.requests) {\n      const attestation = attestations[request.uid];\n      await expect(res)\n        .to.emit(eas, 'Revoked')\n        .withArgs(attestation.recipient, attester, request.uid, attestation.schema);\n\n      expect(await eas.isAttestationValid(request.uid)).to.be.true;\n\n      const attestation2 = await eas.getAttestation(request.uid);\n      expect(attestation2.revocationTime).to.equal(await eas.getTime());\n    }\n  }\n\n  return res;\n};\n\nexport const expectFailedRevocation = async (\n  contracts: RequestContracts,\n  schema: string,\n  request: RevocationRequestData,\n  options: RevocationOptions,\n  err: string,\n  contract?: BaseContract\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n  const { uid, value = 0n } = request;\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const msgValue = options.value ?? value;\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      await expect(\n        eas.connect(txSender).revoke({ schema, data: { uid, value } }, { value: msgValue })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const signature = await eip712Utils.signDelegatedRevocation(\n        txSender,\n        schema,\n        uid,\n        msgValue,\n        await eas.getNonce(await txSender.getAddress()),\n        deadline\n      );\n\n      expect(await eip712Utils.verifyDelegatedRevocationSignature(await txSender.getAddress(), signature)).to.be.true;\n\n      await expect(\n        eas.revokeByDelegation(\n          {\n            schema,\n            data: { uid, value },\n            signature: {\n              v: signature.v,\n              r: hexlify(signature.r),\n              s: hexlify(signature.s)\n            },\n            revoker: await txSender.getAddress(),\n            deadline\n          },\n          { value: msgValue }\n        )\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(txSender, schema, uid, msgValue, deadline);\n\n      expect(await eip712ProxyUtils.verifyDelegatedProxyRevocationSignature(await txSender.getAddress(), signature)).to\n        .be.true;\n\n      await expect(\n        eip712ProxyUtils.proxy.connect(txSender).revokeByDelegation(\n          {\n            schema,\n            data: { uid, value },\n            signature: {\n              v: signature.v,\n              r: hexlify(signature.r),\n              s: hexlify(signature.s)\n            },\n            revoker: await txSender.getAddress(),\n            deadline\n          },\n          { value: msgValue }\n        )\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n  }\n};\n\nexport const expectFailedMultiRevocations = async (\n  contracts: RequestContracts,\n  requests: MultiRevocationRequest[],\n  options: RevocationOptions,\n  err: string,\n  contract?: BaseContract\n) => {\n  const { eas, eip712Utils, eip712ProxyUtils } = contracts;\n  const { from: txSender, signatureType = SignatureType.Direct, deadline = NO_EXPIRATION } = options;\n\n  const multiRevocationRequests = requests.map((r) => ({\n    schema: r.schema,\n    data: r.requests.map((d) => ({\n      uid: d.uid,\n      value: d.value ?? 0n\n    }))\n  }));\n\n  const msgValue =\n    options.value ??\n    multiRevocationRequests.reduce((res, { data }) => {\n      const total = data.reduce((res, r) => res + r.value, 0n);\n      return res + total;\n    }, 0n);\n\n  switch (signatureType) {\n    case SignatureType.Direct: {\n      await expect(\n        eas.connect(txSender).multiRevoke(multiRevocationRequests, {\n          value: msgValue\n        })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.Delegated: {\n      if (!eip712Utils) {\n        throw new Error('Invalid verifier');\n      }\n\n      const multiDelegatedRevocationRequests: MultiDelegatedRevocationRequestStruct[] = [];\n\n      let nonce = await eas.getNonce(await txSender.getAddress());\n\n      for (const { schema, data } of multiRevocationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712RevocationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712Utils.signDelegatedRevocation(\n            txSender,\n            schema,\n            request.uid,\n            msgValue,\n            nonce,\n            deadline\n          );\n\n          expect(await eip712Utils.verifyDelegatedRevocationSignature(await txSender.getAddress(), signature)).to.be\n            .true;\n\n          signatures.push(signature);\n\n          nonce++;\n        }\n\n        multiDelegatedRevocationRequests.push({\n          schema,\n          data,\n          signatures,\n          revoker: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      await expect(\n        eas.connect(txSender).multiRevokeByDelegation(multiDelegatedRevocationRequests, { value: msgValue })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n\n    case SignatureType.DelegatedProxy: {\n      if (!eip712ProxyUtils) {\n        throw new Error('Invalid proxy');\n      }\n\n      const multiDelegatedRevocationRequests: MultiDelegatedProxyRevocationRequestStruct[] = [];\n\n      for (const { schema, data } of multiRevocationRequests) {\n        const signatures: EIP712Request<EIP712MessageTypes, EIP712RevocationParams>[] = [];\n\n        for (const request of data) {\n          const signature = await eip712ProxyUtils.signDelegatedProxyRevocation(\n            txSender,\n            schema,\n            request.uid,\n            msgValue,\n            deadline\n          );\n\n          expect(await eip712ProxyUtils.verifyDelegatedProxyRevocationSignature(await txSender.getAddress(), signature))\n            .to.be.true;\n\n          signatures.push(signature);\n        }\n\n        multiDelegatedRevocationRequests.push({\n          schema,\n          data,\n          signatures,\n          revoker: await txSender.getAddress(),\n          deadline\n        });\n      }\n\n      await expect(\n        eip712ProxyUtils.proxy\n          .connect(txSender)\n          .multiRevokeByDelegation(multiDelegatedRevocationRequests, { value: msgValue })\n      ).to.be.revertedWithCustomError(contract ?? eas, err);\n\n      break;\n    }\n  }\n};\n"
  },
  {
    "path": "test/helpers/EIP712ProxyUtils.ts",
    "content": "import { AbiCoder, keccak256, Signer, toUtf8Bytes } from 'ethers';\nimport { network } from 'hardhat';\nimport { EIP712Proxy } from '../../typechain-types';\nimport {\n  DomainTypedData,\n  EIP712_DOMAIN,\n  EIP712AttestationParams,\n  EIP712MessageTypes,\n  EIP712Request,\n  EIP712RevocationParams,\n  EIP712Utils,\n  TypedData,\n  TypedDataConfig\n} from './EIP712Utils';\n\nexport const ATTEST_PROXY_TYPED_SIGNATURE =\n  // eslint-disable-next-line max-len\n  'Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)';\nexport const REVOKE_PROXY_TYPED_SIGNATURE =\n  'Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)';\nexport const ATTEST_PROXY_PRIMARY_TYPE = 'Attest';\nexport const REVOKE_PROXY_PRIMARY_TYPE = 'Revoke';\nexport const ATTEST_PROXY_TYPE: TypedData[] = [\n  { name: 'attester', type: 'address' },\n  { name: 'schema', type: 'bytes32' },\n  { name: 'recipient', type: 'address' },\n  { name: 'expirationTime', type: 'uint64' },\n  { name: 'revocable', type: 'bool' },\n  { name: 'refUID', type: 'bytes32' },\n  { name: 'data', type: 'bytes' },\n  { name: 'value', type: 'uint256' },\n  { name: 'deadline', type: 'uint64' }\n];\nexport const REVOKE_PROXY_TYPE: TypedData[] = [\n  { name: 'revoker', type: 'address' },\n  { name: 'schema', type: 'bytes32' },\n  { name: 'uid', type: 'bytes32' },\n  { name: 'value', type: 'uint256' },\n  { name: 'deadline', type: 'uint64' }\n];\n\nexport class EIP712ProxyUtils {\n  public proxy: EIP712Proxy;\n  private config?: TypedDataConfig;\n  private name?: string;\n\n  private constructor(proxy: EIP712Proxy) {\n    this.proxy = proxy;\n  }\n\n  public static async fromProxy(verifier: EIP712Proxy) {\n    const utils = new EIP712ProxyUtils(verifier);\n    await utils.init();\n\n    return utils;\n  }\n\n  public async init() {\n    this.config = {\n      address: await this.proxy.getAddress(),\n      version: await this.proxy.version(),\n      chainId: network.config.chainId!\n    };\n\n    this.name = await this.proxy.getName();\n  }\n\n  public getDomainSeparator(name: string) {\n    if (!this.config) {\n      throw new Error(\"EIP712ProxyUtils wasn't initialized\");\n    }\n\n    return keccak256(\n      AbiCoder.defaultAbiCoder().encode(\n        ['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'],\n        [\n          keccak256(toUtf8Bytes(EIP712_DOMAIN)),\n          keccak256(toUtf8Bytes(name)),\n          keccak256(toUtf8Bytes(this.config.version)),\n          this.config.chainId,\n          this.config.address\n        ]\n      )\n    );\n  }\n\n  public getDomainTypedData(): DomainTypedData {\n    if (!this.config || !this.name) {\n      throw new Error(\"EIP712ProxyUtils wasn't initialized\");\n    }\n\n    return {\n      name: this.name,\n      version: this.config.version,\n      chainId: this.config.chainId,\n      verifyingContract: this.config.address\n    };\n  }\n\n  public async signDelegatedProxyAttestation(\n    attester: Signer,\n    schema: string,\n    recipient: string | Signer,\n    expirationTime: bigint,\n    revocable: boolean,\n    refUID: string,\n    data: string,\n    value: bigint,\n    deadline: bigint\n  ): Promise<EIP712Request<EIP712MessageTypes, EIP712AttestationParams>> {\n    const params = {\n      attester: await attester.getAddress(),\n      schema,\n      recipient: typeof recipient === 'string' ? recipient : await recipient.getAddress(),\n      expirationTime,\n      revocable,\n      refUID,\n      data: Buffer.from(data.slice(2), 'hex'),\n      value,\n      deadline\n    };\n\n    return EIP712Utils.signTypedDataRequest<EIP712MessageTypes, EIP712AttestationParams>(\n      params,\n      {\n        domain: this.getDomainTypedData(),\n        primaryType: ATTEST_PROXY_PRIMARY_TYPE,\n        message: params,\n        types: {\n          Attest: ATTEST_PROXY_TYPE\n        }\n      },\n      attester\n    );\n  }\n\n  public async verifyDelegatedProxyAttestationSignature(\n    attester: string | Signer,\n    request: EIP712Request<EIP712MessageTypes, EIP712AttestationParams>\n  ): Promise<boolean> {\n    return EIP712Utils.verifyTypedDataRequestSignature(\n      typeof attester === 'string' ? attester : await attester.getAddress(),\n      request\n    );\n  }\n\n  public async signDelegatedProxyRevocation(\n    revoker: Signer,\n    schema: string,\n    uid: string,\n    value: bigint,\n    deadline: bigint\n  ): Promise<EIP712Request<EIP712MessageTypes, EIP712RevocationParams>> {\n    const params = {\n      revoker: await revoker.getAddress(),\n      schema,\n      uid,\n      value,\n      deadline\n    };\n\n    return EIP712Utils.signTypedDataRequest<EIP712MessageTypes, EIP712RevocationParams>(\n      params,\n      {\n        domain: this.getDomainTypedData(),\n        primaryType: REVOKE_PROXY_PRIMARY_TYPE,\n        message: params,\n        types: {\n          Revoke: REVOKE_PROXY_TYPE\n        }\n      },\n      revoker\n    );\n  }\n\n  public async verifyDelegatedProxyRevocationSignature(\n    attester: string | Signer,\n    request: EIP712Request<EIP712MessageTypes, EIP712RevocationParams>\n  ): Promise<boolean> {\n    return EIP712Utils.verifyTypedDataRequestSignature(\n      typeof attester === 'string' ? attester : await attester.getAddress(),\n      request\n    );\n  }\n}\n"
  },
  {
    "path": "test/helpers/EIP712Utils.ts",
    "content": "import {\n  AbiCoder,\n  getAddress,\n  hexlify,\n  keccak256,\n  Signature as Sig,\n  Signer,\n  toUtf8Bytes,\n  TypedDataEncoder,\n  verifyTypedData\n} from 'ethers';\nimport { network } from 'hardhat';\nimport { EAS, TestEIP1271Verifier } from '../../typechain-types';\nimport { ZERO_ADDRESS } from '../../utils/Constants';\n\nexport interface TypedData {\n  name: string;\n  type:\n    | 'bool'\n    | 'uint8'\n    | 'uint16'\n    | 'uint32'\n    | 'uint64'\n    | 'uint128'\n    | 'uint256'\n    | 'address'\n    | 'string'\n    | 'bytes'\n    | 'bytes32';\n}\n\nexport interface TypedDataConfig {\n  address: string;\n  version: string;\n  chainId: number;\n}\n\nexport interface DomainTypedData {\n  chainId: number;\n  name: string;\n  verifyingContract: string;\n  version: string;\n}\n\nexport interface EIP712DomainTypedData {\n  chainId: number;\n  name: string;\n  verifyingContract: string;\n  version: string;\n}\n\nexport interface EIP712MessageTypes {\n  [additionalProperties: string]: TypedData[];\n}\n\nexport type EIP712Params = {\n  nonce?: bigint;\n};\n\nexport interface EIP712TypedData<T extends EIP712MessageTypes, P extends EIP712Params> {\n  domain: EIP712DomainTypedData;\n  primaryType: keyof T;\n  types: T;\n  message: P;\n}\n\nexport interface Signature {\n  r: string;\n  s: string;\n  v: number;\n}\n\nexport interface EIP712Request<T extends EIP712MessageTypes, P extends EIP712Params> extends Signature {\n  params: P;\n  types: EIP712TypedData<T, P>;\n}\n\nexport type EIP712AttestationParams = EIP712Params & {\n  attester: string;\n  schema: string;\n  recipient: string;\n  expirationTime: bigint;\n  revocable: boolean;\n  refUID: string;\n  data: Buffer;\n  value: bigint;\n  deadline: bigint;\n};\n\nexport type EIP712RevocationParams = EIP712Params & {\n  revoker: string;\n  schema: string;\n  uid: string;\n  value: bigint;\n  deadline: bigint;\n};\n\nexport const EIP712_DOMAIN = 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)';\n\nexport const ATTEST_TYPED_SIGNATURE =\n  // eslint-disable-next-line max-len\n  'Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)';\nexport const REVOKE_TYPED_SIGNATURE =\n  'Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)';\nexport const ATTEST_PRIMARY_TYPE = 'Attest';\nexport const REVOKE_PRIMARY_TYPE = 'Revoke';\nexport const ATTEST_TYPE: TypedData[] = [\n  { name: 'attester', type: 'address' },\n  { name: 'schema', type: 'bytes32' },\n  { name: 'recipient', type: 'address' },\n  { name: 'expirationTime', type: 'uint64' },\n  { name: 'revocable', type: 'bool' },\n  { name: 'refUID', type: 'bytes32' },\n  { name: 'data', type: 'bytes' },\n  { name: 'value', type: 'uint256' },\n  { name: 'nonce', type: 'uint256' },\n  { name: 'deadline', type: 'uint64' }\n];\nexport const REVOKE_TYPE: TypedData[] = [\n  { name: 'revoker', type: 'address' },\n  { name: 'schema', type: 'bytes32' },\n  { name: 'uid', type: 'bytes32' },\n  { name: 'value', type: 'uint256' },\n  { name: 'nonce', type: 'uint256' },\n  { name: 'deadline', type: 'uint64' }\n];\n\nexport class EIP712Utils {\n  private verifier: EAS | TestEIP1271Verifier;\n  private config?: TypedDataConfig;\n  private name?: string;\n\n  private constructor(verifier: EAS | TestEIP1271Verifier) {\n    this.verifier = verifier;\n  }\n\n  public static async fromVerifier(verifier: EAS | TestEIP1271Verifier) {\n    const utils = new EIP712Utils(verifier);\n    await utils.init();\n\n    return utils;\n  }\n\n  public async init() {\n    this.config = {\n      address: await this.verifier.getAddress(),\n      version: await this.verifier.version(),\n      chainId: network.config.chainId!\n    };\n\n    this.name = await this.verifier.getName();\n  }\n\n  public getDomainSeparator(name: string) {\n    if (!this.config) {\n      throw new Error(\"EIP712Utils wasn't initialized\");\n    }\n\n    return keccak256(\n      AbiCoder.defaultAbiCoder().encode(\n        ['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'],\n        [\n          keccak256(toUtf8Bytes(EIP712_DOMAIN)),\n          keccak256(toUtf8Bytes(name)),\n          keccak256(toUtf8Bytes(this.config.version)),\n          this.config.chainId,\n          this.config.address\n        ]\n      )\n    );\n  }\n\n  public getDomainTypedData(): DomainTypedData {\n    if (!this.config || !this.name) {\n      throw new Error(\"EIP712Utils wasn't initialized\");\n    }\n\n    return {\n      name: this.name,\n      version: this.config.version,\n      chainId: this.config.chainId,\n      verifyingContract: this.config.address\n    };\n  }\n\n  public async signDelegatedAttestation(\n    attester: Signer,\n    schema: string,\n    recipient: string | Signer,\n    expirationTime: bigint,\n    revocable: boolean,\n    refUID: string,\n    data: string,\n    value: bigint,\n    nonce: bigint,\n    deadline: bigint\n  ): Promise<EIP712Request<EIP712MessageTypes, EIP712AttestationParams>> {\n    const params = {\n      attester: await attester.getAddress(),\n      schema,\n      recipient: typeof recipient === 'string' ? recipient : await recipient.getAddress(),\n      expirationTime,\n      revocable,\n      refUID,\n      data: Buffer.from(data.slice(2), 'hex'),\n      value,\n      nonce,\n      deadline\n    };\n\n    return EIP712Utils.signTypedDataRequest<EIP712MessageTypes, EIP712AttestationParams>(\n      params,\n      {\n        domain: this.getDomainTypedData(),\n        primaryType: ATTEST_PRIMARY_TYPE,\n        message: params,\n        types: {\n          Attest: ATTEST_TYPE\n        }\n      },\n      attester\n    );\n  }\n\n  public async verifyDelegatedAttestationSignature(\n    attester: string | Signer,\n    request: EIP712Request<EIP712MessageTypes, EIP712AttestationParams>\n  ): Promise<boolean> {\n    return EIP712Utils.verifyTypedDataRequestSignature(\n      typeof attester === 'string' ? attester : await attester.getAddress(),\n      request\n    );\n  }\n\n  public async hashDelegatedAttestation(\n    attester: string | Signer,\n    schema: string,\n    recipient: string | Signer,\n    expirationTime: bigint,\n    revocable: boolean,\n    refUID: string,\n    data: string,\n    value: bigint,\n    nonce: bigint,\n    deadline: bigint\n  ): Promise<string> {\n    const params = {\n      attester: typeof attester === 'string' ? attester : await attester.getAddress(),\n      schema,\n      recipient: typeof recipient === 'string' ? recipient : await recipient.getAddress(),\n      expirationTime,\n      revocable,\n      refUID,\n      data: Buffer.from(data.slice(2), 'hex'),\n      value,\n      nonce,\n      deadline\n    };\n\n    return EIP712Utils.hashTypedData<EIP712MessageTypes, EIP712AttestationParams>(params, {\n      domain: this.getDomainTypedData(),\n      primaryType: ATTEST_PRIMARY_TYPE,\n      message: params,\n      types: {\n        Attest: ATTEST_TYPE\n      }\n    });\n  }\n\n  public async signDelegatedRevocation(\n    revoker: Signer,\n    schema: string,\n    uid: string,\n    value: bigint,\n    nonce: bigint,\n    deadline: bigint\n  ): Promise<EIP712Request<EIP712MessageTypes, EIP712RevocationParams>> {\n    const params = {\n      revoker: await revoker.getAddress(),\n      schema,\n      uid,\n      value,\n      nonce,\n      deadline\n    };\n\n    return EIP712Utils.signTypedDataRequest<EIP712MessageTypes, EIP712RevocationParams>(\n      params,\n      {\n        domain: this.getDomainTypedData(),\n        primaryType: REVOKE_PRIMARY_TYPE,\n        message: params,\n        types: {\n          Revoke: REVOKE_TYPE\n        }\n      },\n      revoker\n    );\n  }\n\n  public async verifyDelegatedRevocationSignature(\n    revoker: string | Signer,\n    request: EIP712Request<EIP712MessageTypes, EIP712RevocationParams>\n  ): Promise<boolean> {\n    return EIP712Utils.verifyTypedDataRequestSignature(\n      typeof revoker === 'string' ? revoker : await revoker.getAddress(),\n      request\n    );\n  }\n\n  public async hashDelegatedRevocation(\n    revoker: string | Signer,\n    schema: string,\n    uid: string,\n    value: bigint,\n    nonce: bigint,\n    deadline: bigint\n  ): Promise<string> {\n    const params = {\n      revoker: typeof revoker === 'string' ? revoker : await revoker.getAddress(),\n      schema,\n      uid,\n      value,\n      nonce,\n      deadline\n    };\n\n    return EIP712Utils.hashTypedData<EIP712MessageTypes, EIP712RevocationParams>(params, {\n      domain: this.getDomainTypedData(),\n      primaryType: REVOKE_PRIMARY_TYPE,\n      message: params,\n      types: {\n        Revoke: REVOKE_TYPE\n      }\n    });\n  }\n\n  public static hashTypedData<T extends EIP712MessageTypes, P extends EIP712Params>(\n    params: P,\n    types: EIP712TypedData<T, P>\n  ): string {\n    return TypedDataEncoder.hash(types.domain, types.types, params);\n  }\n\n  public static async signTypedDataRequest<T extends EIP712MessageTypes, P extends EIP712Params>(\n    params: P,\n    types: EIP712TypedData<T, P>,\n    signer: Signer\n  ): Promise<EIP712Request<T, P>> {\n    const rawSignature = await signer.signTypedData(types.domain, types.types, params);\n    const signature = Sig.from(rawSignature);\n    return { types, params, v: signature.v, r: signature.r, s: signature.s };\n  }\n\n  public static verifyTypedDataRequestSignature<T extends EIP712MessageTypes, P extends EIP712Params>(\n    attester: string,\n    request: EIP712Request<T, P>\n  ): boolean {\n    if (attester === ZERO_ADDRESS) {\n      throw new Error('Invalid address');\n    }\n\n    const sig = Sig.from({ v: request.v, r: hexlify(request.r), s: hexlify(request.s) }).serialized;\n    const recoveredAddress = verifyTypedData(request.types.domain, request.types.types, request.params, sig);\n\n    return getAddress(attester) === getAddress(recoveredAddress);\n  }\n}\n"
  },
  {
    "path": "test/helpers/Time.ts",
    "content": "import { ethers } from 'hardhat';\n\nexport * from '../../utils/Time';\n\nexport const latest = async (): Promise<bigint> => {\n  const block = await ethers.provider.getBlock('latest');\n  if (!block) {\n    throw new Error('Unable to get the latest block');\n  }\n\n  return BigInt(block.timestamp);\n};\n"
  },
  {
    "path": "test/helpers/Transaction.ts",
    "content": "import { TransactionResponse } from 'ethers';\n\nexport const getTransactionGas = async (res: TransactionResponse) => {\n  const receipt = await res.wait();\n  if (!receipt) {\n    throw new Error(`Unable to confirm: ${res}`);\n  }\n\n  return receipt.cumulativeGasUsed;\n};\n\nexport const getTransactionCost = async (res: TransactionResponse) => {\n  const receipt = await res.wait();\n  if (!receipt) {\n    throw new Error(`Unable to confirm: ${res}`);\n  }\n\n  return receipt.gasPrice * (await getTransactionGas(res));\n};\n"
  },
  {
    "path": "test/helpers/Wallet.ts",
    "content": "import { Wallet } from 'ethers';\nimport { ethers } from 'hardhat';\n\n// eslint-disable-next-line require-await\nexport const getBalance = async (address: string) => ethers.provider.getBalance(address);\n\nexport const createWallet = async () => {\n  const wallet = Wallet.createRandom().connect(ethers.provider);\n  const deployer = (await ethers.getSigners())[0];\n  await deployer.sendTransaction({\n    value: 10_000_000n * 10n ** 18n,\n    to: await wallet.getAddress()\n  });\n\n  return wallet;\n};\n"
  },
  {
    "path": "test/resolver/AttestationResolver.ts",
    "content": "import { expect } from 'chai';\nimport { encodeBytes32String, Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { AttestationResolver, SchemaRegistry, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION, ZERO_ADDRESS, ZERO_BYTES32 } from '../../utils/Constants';\nimport { getSchemaUID, getUIDFromAttestTx } from '../../utils/EAS';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('AttestationResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let resolver: AttestationResolver;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const expirationTime = NO_EXPIRATION;\n  const MAGIC_DATA = encodeBytes32String('EA5EA5EA5EA5EA5EA5EA5EA5EA5EA5');\n\n  const schema2 = 'bool isFriend';\n  const schema2Id = getSchemaUID(schema2, ZERO_ADDRESS, true);\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    await registerSchema(schema2, registry, ZERO_ADDRESS, true);\n\n    resolver = await Contracts.AttestationResolver.deploy(eas.getAddress());\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  context('non-existing attestation', () => {\n    it('should revert', async () => {\n      await expectFailedAttestation(\n        {\n          eas\n        },\n        schemaId,\n        {\n          recipient: await recipient.getAddress(),\n          expirationTime\n        },\n        { from: sender },\n        'InvalidAttestation'\n      );\n\n      const uid = await getUIDFromAttestTx(\n        eas.attest({\n          schema: schema2Id,\n          data: {\n            recipient: await recipient.getAddress(),\n            expirationTime,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data: '0x1234',\n            value: 0\n          }\n        })\n      );\n\n      await expectFailedMultiAttestations(\n        {\n          eas\n        },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: uid\n              }\n            ]\n          }\n        ],\n        { from: sender },\n        'InvalidAttestations'\n      );\n\n      await expectFailedMultiAttestations(\n        {\n          eas\n        },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: uid\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime\n              }\n            ]\n          }\n        ],\n        { from: sender },\n        'InvalidAttestations'\n      );\n    });\n  });\n\n  context('invalid attestation', () => {\n    let uid: string;\n\n    beforeEach(async () => {\n      uid = await getUIDFromAttestTx(\n        eas.attest({\n          schema: schema2Id,\n          data: {\n            recipient: await recipient.getAddress(),\n            expirationTime,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data: '0x1234',\n            value: 0\n          }\n        })\n      );\n    });\n\n    it('should revert', async () => {\n      await expectFailedAttestation(\n        {\n          eas\n        },\n        schemaId,\n        {\n          recipient: await recipient.getAddress(),\n          expirationTime\n        },\n        { from: sender },\n        'InvalidAttestation'\n      );\n\n      await expectFailedMultiAttestations(\n        {\n          eas\n        },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: uid\n              }\n            ]\n          }\n        ],\n        { from: sender },\n        'InvalidAttestations'\n      );\n\n      await expectFailedMultiAttestations(\n        {\n          eas\n        },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                data: uid\n              },\n              {\n                recipient: await recipient.getAddress(),\n                expirationTime\n              }\n            ]\n          }\n        ],\n        { from: sender },\n        'InvalidAttestations'\n      );\n    });\n  });\n\n  context('valid attestation', () => {\n    let uid: string;\n\n    beforeEach(async () => {\n      uid = await getUIDFromAttestTx(\n        eas.attest({\n          schema: schema2Id,\n          data: {\n            recipient: await recipient.getAddress(),\n            expirationTime,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data: MAGIC_DATA,\n            value: 0\n          }\n        })\n      );\n    });\n\n    it('should allow attesting', async () => {\n      const { uid: uid2 } = await expectAttestation(\n        { eas },\n        schemaId,\n        { recipient: await recipient.getAddress(), expirationTime, data: uid },\n        { from: sender }\n      );\n\n      await expectRevocation({ eas }, schemaId, { uid: uid2 }, { from: sender });\n\n      const { uids } = await expectMultiAttestations(\n        { eas },\n        [\n          {\n            schema: schemaId,\n            requests: [\n              { recipient: await recipient.getAddress(), expirationTime, data: uid },\n              { recipient: await recipient.getAddress(), expirationTime, data: uid }\n            ]\n          }\n        ],\n        { from: sender }\n      );\n\n      await expectMultiRevocations(\n        { eas },\n        [\n          {\n            schema: schemaId,\n            requests: uids.map((uid) => ({ uid }))\n          }\n        ],\n        { from: sender }\n      );\n    });\n  });\n\n  describe('byte utils', () => {\n    it('should revert on invalid input', async () => {\n      await expect(resolver.toBytes32('0x1234', 1000)).to.be.revertedWithCustomError(resolver, 'OutOfBounds');\n    });\n  });\n});\n"
  },
  {
    "path": "test/resolver/AttesterResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION } from '../../utils/Constants';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('AttesterResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n  let sender2: Signer;\n  let targetSender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const data = '0x1234';\n  const expirationTime = NO_EXPIRATION;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    sender2 = await createWallet();\n    targetSender = sender2;\n\n    const resolver = await Contracts.AttesterResolver.deploy(await eas.getAddress(), await targetSender.getAddress());\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  it('should revert when attesting via the wrong attester', async () => {\n    await expectFailedAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      { from: sender },\n      'InvalidAttestation'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n  });\n\n  it('should allow attesting via the correct attester', async () => {\n    const { uid } = await expectAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      { from: targetSender }\n    );\n\n    await expectRevocation({ eas }, schemaId, { uid }, { from: targetSender });\n\n    const res = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: targetSender }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: res.uids.map((uid) => ({ uid }))\n        }\n      ],\n      { from: targetSender }\n    );\n  });\n});\n"
  },
  {
    "path": "test/resolver/DataResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION } from '../../utils/Constants';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('DataResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const expirationTime = NO_EXPIRATION;\n\n  const DATA1 = '0x00';\n  const DATA2 = '0x01';\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    const resolver = await Contracts.DataResolver.deploy(await eas.getAddress());\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  it('should revert when attesting with wrong data', async () => {\n    await expectFailedAttestation(\n      {\n        eas\n      },\n      schemaId,\n      {\n        recipient: await recipient.getAddress(),\n        expirationTime,\n        data: '0x1234'\n      },\n      { from: sender },\n      'InvalidAttestation'\n    );\n\n    await expectFailedAttestation(\n      {\n        eas\n      },\n      schemaId,\n      {\n        recipient: await recipient.getAddress(),\n        expirationTime,\n        data: '0x02'\n      },\n      { from: sender },\n      'InvalidAttestation'\n    );\n\n    await expectFailedMultiAttestations(\n      {\n        eas\n      },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data: '0x02'\n            },\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data: DATA1\n            }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n\n    await expectFailedMultiAttestations(\n      {\n        eas\n      },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data: DATA2\n            },\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data: '0x02'\n            }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n  });\n\n  it('should allow attesting with correct data', async () => {\n    const { uid } = await expectAttestation(\n      {\n        eas\n      },\n      schemaId,\n      {\n        recipient: await recipient.getAddress(),\n        expirationTime,\n        data: DATA1\n      },\n      {\n        from: sender\n      }\n    );\n\n    await expectRevocation({ eas }, schemaId, { uid }, { from: sender });\n\n    const { uid: uid2 } = await expectAttestation(\n      {\n        eas\n      },\n      schemaId,\n      {\n        recipient: await recipient.getAddress(),\n        expirationTime,\n        data: DATA2\n      },\n      {\n        from: sender\n      }\n    );\n\n    await expectRevocation({ eas }, schemaId, { uid: uid2 }, { from: sender });\n\n    const res = await expectMultiAttestations(\n      {\n        eas\n      },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data: DATA1\n            },\n            {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              data: DATA2\n            }\n          ]\n        }\n      ],\n      {\n        from: sender\n      }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: res.uids.map((uid) => ({ uid }))\n        }\n      ],\n      { from: sender }\n    );\n  });\n});\n"
  },
  {
    "path": "test/resolver/ExpirationTimeResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, TestEAS } from '../../typechain-types';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { duration, latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('ExpirationTimeResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const data = '0x1234';\n  let validAfter: bigint;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    validAfter = (await eas.getTime()) + duration.years(1n);\n\n    const resolver = await Contracts.ExpirationTimeResolver.deploy(await eas.getAddress(), validAfter);\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  it('should revert when attesting with a wrong expiration time', async () => {\n    await expectFailedAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime: validAfter - duration.days(1n), data },\n      { from: sender },\n      'InvalidAttestation'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime: validAfter - duration.days(1n), data },\n            { recipient: await recipient.getAddress(), expirationTime: validAfter + duration.seconds(1n), data }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime: validAfter + duration.days(1n), data },\n            { recipient: await recipient.getAddress(), expirationTime: validAfter - duration.seconds(1n), data }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n  });\n\n  it('should allow attesting with the correct expiration time', async () => {\n    const { uid } = await expectAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime: validAfter + duration.seconds(1n), data },\n      { from: sender }\n    );\n\n    await expectRevocation({ eas }, schemaId, { uid }, { from: sender });\n\n    const res = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime: validAfter + duration.seconds(1n), data },\n            { recipient: await recipient.getAddress(), expirationTime: validAfter + duration.weeks(1n), data }\n          ]\n        }\n      ],\n      { from: sender }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: res.uids.map((uid) => ({ uid }))\n        }\n      ],\n      { from: sender }\n    );\n  });\n});\n"
  },
  {
    "path": "test/resolver/PayingResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, SchemaResolver, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION, ZERO_BYTES32 } from '../../utils/Constants';\nimport { getUIDFromAttestTx } from '../../utils/EAS';\nimport { getTransactionCost } from '..//helpers/Transaction';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectFailedMultiRevocations,\n  expectFailedRevocation,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet, getBalance } from '../helpers/Wallet';\n\ndescribe('PayingResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let resolver: SchemaResolver;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const data = '0x1234';\n  const expirationTime = NO_EXPIRATION;\n\n  const incentive = 12345n;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    resolver = await Contracts.PayingResolver.deploy(await eas.getAddress(), incentive);\n    expect(await resolver.isPayable()).to.be.true;\n\n    await sender.sendTransaction({ to: await resolver.getAddress(), value: incentive * 100n });\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  it('should incentivize attesters', async () => {\n    const prevResolverBalance: bigint = await getBalance(await resolver.getAddress());\n    const prevAttesterBalance: bigint = await getBalance(await sender.getAddress());\n\n    const { res } = await expectAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      {\n        from: sender,\n        skipBalanceCheck: true\n      }\n    );\n    let transactionCost = await getTransactionCost(res);\n\n    expect(await getBalance(await resolver.getAddress())).to.equal(prevResolverBalance - incentive);\n    expect(await getBalance(await sender.getAddress())).to.equal(prevAttesterBalance + incentive - transactionCost);\n\n    const prevResolverBalance2: bigint = await getBalance(await resolver.getAddress());\n    const prevAttesterBalance2: bigint = await getBalance(await sender.getAddress());\n\n    const { uids, res: res2 } = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      {\n        from: sender,\n        skipBalanceCheck: true\n      }\n    );\n\n    transactionCost = await getTransactionCost(res2);\n\n    expect(await getBalance(await resolver.getAddress())).to.equal(\n      prevResolverBalance2 - incentive * BigInt(uids.length)\n    );\n    expect(await getBalance(await sender.getAddress())).to.equal(\n      prevAttesterBalance2 + incentive * BigInt(uids.length) - transactionCost\n    );\n  });\n\n  it('should revert when attempting to send any ETH', async () => {\n    await expectFailedAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data, value: 1n },\n      {\n        from: sender\n      },\n      'InvalidAttestation'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value: 1n },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      {\n        from: sender\n      },\n      'InvalidAttestations'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data, value: 1n }\n          ]\n        }\n      ],\n      {\n        from: sender\n      },\n      'InvalidAttestations'\n    );\n  });\n\n  context('with attestations', () => {\n    let uid: string;\n    let uids: string[] = [];\n\n    beforeEach(async () => {\n      uid = await getUIDFromAttestTx(\n        eas.connect(sender).attest({\n          schema: schemaId,\n          data: {\n            recipient: await recipient.getAddress(),\n            expirationTime,\n            revocable: true,\n            refUID: ZERO_BYTES32,\n            data,\n            value: 0\n          }\n        })\n      );\n\n      uids = [];\n\n      for (let i = 0; i < 2; i++) {\n        uids.push(\n          await getUIDFromAttestTx(\n            eas.connect(sender).attest({\n              schema: schemaId,\n              data: {\n                recipient: await recipient.getAddress(),\n                expirationTime,\n                revocable: true,\n                refUID: ZERO_BYTES32,\n                data,\n                value: 0\n              }\n            })\n          )\n        );\n      }\n    });\n\n    it('should revert when attempting to revoke an attestation without repaying the incentive', async () => {\n      await expectFailedRevocation({ eas }, schemaId, { uid }, { from: sender }, 'InvalidRevocation');\n\n      await expectFailedMultiRevocations(\n        { eas },\n        [\n          {\n            schema: schemaId,\n            requests: [{ uid }]\n          }\n        ],\n        { from: sender },\n        'InvalidRevocation'\n      );\n    });\n\n    it('should revoke attestations', async () => {\n      const prevResolverBalance: bigint = await getBalance(await resolver.getAddress());\n      const prevAttesterBalance: bigint = await getBalance(await sender.getAddress());\n\n      const value = incentive;\n      const res = await expectRevocation({ eas }, schemaId, { uid, value }, { from: sender });\n      let transactionCost = await getTransactionCost(res);\n\n      expect(await getBalance(await resolver.getAddress())).to.equal(prevResolverBalance + incentive);\n      expect(await getBalance(await sender.getAddress())).to.equal(prevAttesterBalance - incentive - transactionCost);\n\n      const prevResolverBalance2: bigint = await getBalance(await resolver.getAddress());\n      const prevAttesterBalance2: bigint = await getBalance(await sender.getAddress());\n\n      const res2 = await expectMultiRevocations(\n        { eas },\n        [\n          {\n            schema: schemaId,\n            requests: uids.map((uid) => ({ uid, value }))\n          }\n        ],\n        { from: sender, skipBalanceCheck: true }\n      );\n\n      transactionCost = await getTransactionCost(res2);\n\n      expect(await getBalance(await resolver.getAddress())).to.equal(\n        prevResolverBalance2 + incentive * BigInt(uids.length)\n      );\n      expect(await getBalance(await sender.getAddress())).to.equal(\n        prevAttesterBalance2 - incentive * BigInt(uids.length) - transactionCost\n      );\n    });\n\n    it('should revoke attestations and refund any remainder', async () => {\n      const prevResolverBalance: bigint = await getBalance(await resolver.getAddress());\n      const prevAttesterBalance: bigint = await getBalance(await sender.getAddress());\n\n      const value = incentive * 10n;\n      const res = await expectRevocation({ eas }, schemaId, { uid, value }, { from: sender, skipBalanceCheck: true });\n      let transactionCost = await getTransactionCost(res);\n\n      expect(await getBalance(await resolver.getAddress())).to.equal(prevResolverBalance + incentive);\n      expect(await getBalance(await sender.getAddress())).to.equal(prevAttesterBalance - incentive - transactionCost);\n\n      const prevResolverBalance2: bigint = await getBalance(await resolver.getAddress());\n      const prevAttesterBalance2: bigint = await getBalance(await sender.getAddress());\n\n      const res2 = await expectMultiRevocations(\n        { eas },\n        [\n          {\n            schema: schemaId,\n            requests: uids.map((uid) => ({ uid, value }))\n          }\n        ],\n        { from: sender, skipBalanceCheck: true }\n      );\n\n      transactionCost = await getTransactionCost(res2);\n\n      expect(await getBalance(await resolver.getAddress())).to.equal(\n        prevResolverBalance2 + incentive * BigInt(uids.length)\n      );\n      expect(await getBalance(await sender.getAddress())).to.equal(\n        prevAttesterBalance2 - incentive * BigInt(uids.length) - transactionCost\n      );\n    });\n\n    it('should revert when attempting to revert with more value than was actually sent', async () => {\n      const value = incentive;\n\n      await expectFailedRevocation(\n        { eas },\n        schemaId,\n        { uid, value: value + 1000n },\n        { from: sender, value },\n        'InsufficientValue'\n      );\n\n      await expectFailedMultiRevocations(\n        { eas },\n        [{ schema: schemaId, requests: [{ uid, value: value + 1000n }] }],\n        { from: sender, value },\n        'InsufficientValue'\n      );\n    });\n\n    it('should allow reverting with the correct value when accidentally sending too much', async () => {\n      const prevResolverBalance: bigint = await getBalance(await resolver.getAddress());\n      const prevAttesterBalance: bigint = await getBalance(await sender.getAddress());\n\n      const value = incentive;\n      const res = await expectRevocation(\n        { eas },\n        schemaId,\n        { uid, value },\n        {\n          from: sender,\n          value: value + 1000n,\n          skipBalanceCheck: true\n        }\n      );\n      let transactionCost = await getTransactionCost(res);\n\n      expect(await getBalance(await resolver.getAddress())).to.equal(prevResolverBalance + incentive);\n      expect(await getBalance(await sender.getAddress())).to.equal(prevAttesterBalance - incentive - transactionCost);\n\n      const prevResolverBalance2: bigint = await getBalance(await resolver.getAddress());\n      const prevAttesterBalance2: bigint = await getBalance(await sender.getAddress());\n\n      const res2 = await expectMultiRevocations(\n        { eas },\n        [\n          {\n            schema: schemaId,\n            requests: uids.map((uid) => ({ uid, value }))\n          }\n        ],\n        { from: sender, value: value * 10n, skipBalanceCheck: true }\n      );\n\n      transactionCost = await getTransactionCost(res2);\n\n      expect(await getBalance(await resolver.getAddress())).to.equal(\n        prevResolverBalance2 + incentive * BigInt(uids.length)\n      );\n      expect(await getBalance(await sender.getAddress())).to.equal(\n        prevAttesterBalance2 - incentive * BigInt(uids.length) - transactionCost\n      );\n    });\n  });\n});\n"
  },
  {
    "path": "test/resolver/RecipientResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION } from '../../utils/Constants';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('RecipientResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const expirationTime = NO_EXPIRATION;\n  const data = '0x1234';\n\n  let targetRecipient: Signer;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    targetRecipient = accounts[5];\n\n    const resolver = await Contracts.RecipientResolver.deploy(\n      await eas.getAddress(),\n      await targetRecipient.getAddress()\n    );\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  it('should revert when attesting to a wrong recipient', async () => {\n    await expectFailedAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      { from: sender },\n      'InvalidAttestation'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await targetRecipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await targetRecipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n  });\n\n  it('should allow attesting to the correct recipient', async () => {\n    const { uid } = await expectAttestation(\n      { eas },\n      schemaId,\n      { recipient: await targetRecipient.getAddress(), expirationTime, data },\n      { from: sender }\n    );\n\n    await expectRevocation({ eas }, schemaId, { uid }, { from: sender });\n\n    const res = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await targetRecipient.getAddress(), expirationTime, data },\n            { recipient: await targetRecipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: sender }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: res.uids.map((uid) => ({ uid }))\n        }\n      ],\n      { from: sender }\n    );\n  });\n});\n"
  },
  {
    "path": "test/resolver/RevocationResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { RevocationResolver, SchemaRegistry, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION, ZERO_BYTES32 } from '../../utils/Constants';\nimport { getUIDFromAttestTx } from '../../utils/EAS';\nimport {\n  expectFailedMultiRevocations,\n  expectFailedRevocation,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('RevocationResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let resolver: RevocationResolver;\n  let uid: string;\n  let uids: string[] = [];\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const data = '0x1234';\n  const expirationTime = NO_EXPIRATION;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    resolver = await Contracts.RevocationResolver.deploy(await eas.getAddress());\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n\n    uid = await getUIDFromAttestTx(\n      eas.connect(sender).attest({\n        schema: schemaId,\n        data: {\n          recipient: await recipient.getAddress(),\n          expirationTime,\n          revocable: true,\n          refUID: ZERO_BYTES32,\n          data,\n          value: 0\n        }\n      })\n    );\n\n    uids = [];\n\n    for (let i = 0; i < 2; i++) {\n      uids.push(\n        await getUIDFromAttestTx(\n          eas.connect(sender).attest({\n            schema: schemaId,\n            data: {\n              recipient: await recipient.getAddress(),\n              expirationTime,\n              revocable: true,\n              refUID: ZERO_BYTES32,\n              data,\n              value: 0\n            }\n          })\n        )\n      );\n    }\n  });\n\n  context('when revocations are allowed', () => {\n    beforeEach(async () => {\n      await resolver.setRevocation(true);\n    });\n\n    it('should allow revoking an existing attestation', async () => {\n      await expectRevocation({ eas }, schemaId, { uid }, { from: sender });\n\n      await expectMultiRevocations({ eas }, [{ schema: schemaId, requests: uids.map((uid) => ({ uid })) }], {\n        from: sender\n      });\n    });\n  });\n\n  context('when revocations are not allowed', () => {\n    beforeEach(async () => {\n      await resolver.setRevocation(false);\n    });\n\n    it('should revert when attempting to revoke an existing attestation', async () => {\n      await expectFailedRevocation({ eas }, schemaId, { uid }, { from: sender }, 'InvalidRevocation');\n\n      await expectFailedMultiRevocations(\n        { eas },\n        [{ schema: schemaId, requests: uids.map((uid) => ({ uid })) }],\n        { from: sender },\n        'InvalidRevocations'\n      );\n    });\n  });\n});\n"
  },
  {
    "path": "test/resolver/SchemaResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, SchemaResolver, TestEAS } from '../../typechain-types';\nimport { AttestationStruct } from '../../typechain-types/contracts/IEAS';\nimport { NO_EXPIRATION, ZERO_ADDRESS, ZERO_BYTES, ZERO_BYTES32 } from '../../utils/Constants';\nimport { expectFailedAttestation, expectFailedMultiAttestations, registerSchema } from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('SchemaResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n  });\n\n  describe('construction', () => {\n    it('should revert when initialized with an invalid EAS', async () => {\n      const resolver = await Contracts.TestSchemaResolver.deploy(await eas.getAddress());\n      await expect(Contracts.TestSchemaResolver.deploy(ZERO_ADDRESS)).to.be.revertedWithCustomError(\n        resolver,\n        'InvalidEAS'\n      );\n    });\n\n    it('should be properly initialized', async () => {\n      const resolver = await Contracts.TestSchemaResolver.deploy(await eas.getAddress());\n\n      expect(await resolver.version()).to.equal('1.4.0');\n    });\n  });\n\n  describe('resolution', () => {\n    const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n    let schemaId: string;\n    const expirationTime = NO_EXPIRATION;\n    const data = '0x1234';\n    let resolver: SchemaResolver;\n\n    context('with a standard resolver', () => {\n      beforeEach(async () => {\n        resolver = await Contracts.TestSchemaResolver.deploy(await eas.getAddress());\n        schemaId = await registerSchema(schema, registry, resolver, true);\n      });\n\n      it('should revert when the attestation callback is invoked directly', async () => {\n        const attestation = {\n          uid: ZERO_BYTES32,\n          schema: ZERO_BYTES32,\n          refUID: ZERO_BYTES32,\n          time: await latest(),\n          expirationTime: 0,\n          revocationTime: 0,\n          revocable: true,\n          recipient: await recipient.getAddress(),\n          attester: await sender.getAddress(),\n          data: ZERO_BYTES\n        };\n\n        await expect(resolver.attest(attestation)).to.be.revertedWithCustomError(resolver, 'AccessDenied');\n        await expect(resolver.multiAttest([attestation, attestation], [0, 0])).to.be.revertedWithCustomError(\n          resolver,\n          'AccessDenied'\n        );\n      });\n\n      it('should revert when the attestation revocation callback is invoked directly', async () => {\n        const attestation = {\n          uid: ZERO_BYTES32,\n          schema: ZERO_BYTES32,\n          refUID: ZERO_BYTES32,\n          time: await latest(),\n          expirationTime: 0,\n          revocationTime: 0,\n          revocable: true,\n          recipient: await recipient.getAddress(),\n          attester: await sender.getAddress(),\n          data: ZERO_BYTES\n        };\n\n        await expect(resolver.revoke(attestation)).to.be.revertedWithCustomError(resolver, 'AccessDenied');\n        await expect(resolver.multiRevoke([attestation, attestation], [0, 0])).to.be.revertedWithCustomError(\n          resolver,\n          'AccessDenied'\n        );\n      });\n\n      context('as an EAS', () => {\n        let sender: Signer;\n\n        let attestation: AttestationStruct;\n        const value = 12345;\n\n        beforeEach(async () => {\n          attestation = {\n            uid: ZERO_BYTES32,\n            schema: ZERO_BYTES32,\n            refUID: ZERO_BYTES32,\n            time: await latest(),\n            expirationTime: 0,\n            revocationTime: 0,\n            revocable: true,\n            recipient: await recipient.getAddress(),\n            attester: await sender.getAddress(),\n            data: ZERO_BYTES\n          };\n        });\n\n        before(() => {\n          sender = accounts[0];\n        });\n\n        beforeEach(async () => {\n          resolver = await Contracts.TestSchemaResolver.deploy(await sender.getAddress());\n        });\n\n        it('should revert when attempting to multi attest with invalid data lengths', async () => {\n          await expect(resolver.multiAttest([attestation], [value - 1, 1], { value })).to.be.revertedWithCustomError(\n            resolver,\n            'InvalidLength'\n          );\n          await expect(\n            resolver.multiAttest([attestation, attestation], [value], { value })\n          ).to.be.revertedWithCustomError(resolver, 'InvalidLength');\n        });\n\n        it('should revert when attempting to multi revert with invalid data lengths', async () => {\n          await expect(resolver.multiRevoke([attestation], [value - 1, 1], { value })).to.be.revertedWithCustomError(\n            resolver,\n            'InvalidLength'\n          );\n          await expect(\n            resolver.multiRevoke([attestation, attestation], [value], { value })\n          ).to.be.revertedWithCustomError(resolver, 'InvalidLength');\n        });\n\n        it('should revert when attempting to multi attest with more value than was actually sent', async () => {\n          await expect(\n            resolver.multiAttest([attestation, attestation], [value, value], { value })\n          ).to.be.revertedWithCustomError(resolver, 'InsufficientValue');\n          await expect(\n            resolver.multiAttest([attestation, attestation], [value - 1, 2], { value })\n          ).to.be.revertedWithCustomError(resolver, 'InsufficientValue');\n        });\n\n        it('should revert when attempting to multi revoke with more value than was actually sent', async () => {\n          await expect(\n            resolver.multiRevoke([attestation, attestation], [value, value], { value })\n          ).to.be.revertedWithCustomError(resolver, 'InsufficientValue');\n          await expect(\n            resolver.multiRevoke([attestation, attestation], [value - 1, 2], { value })\n          ).to.be.revertedWithCustomError(resolver, 'InsufficientValue');\n        });\n      });\n    });\n\n    context('with a non-payable resolver', () => {\n      beforeEach(async () => {\n        resolver = await Contracts.TestSchemaResolver.deploy(await eas.getAddress());\n        expect(await resolver.isPayable()).to.be.false;\n\n        schemaId = await registerSchema(schema, registry, resolver, true);\n      });\n\n      it('should revert when sending', async () => {\n        const value = 1n;\n\n        await expect(sender.sendTransaction({ to: await resolver.getAddress(), value })).to.be.revertedWithCustomError(\n          resolver,\n          'NotPayable'\n        );\n\n        await expectFailedAttestation(\n          { eas },\n          schemaId,\n          { recipient: await recipient.getAddress(), expirationTime, data, value },\n          { value, from: sender },\n          'NotPayable'\n        );\n\n        await expectFailedMultiAttestations(\n          { eas },\n          [\n            {\n              schema: schemaId,\n              requests: [\n                { recipient: await recipient.getAddress(), expirationTime, data, value },\n                { recipient: await recipient.getAddress(), expirationTime, data, value }\n              ]\n            }\n          ],\n          { value, from: sender },\n          'NotPayable'\n        );\n      });\n    });\n\n    context('without any resolvers', () => {\n      beforeEach(async () => {\n        schemaId = await registerSchema(schema, registry, ZERO_ADDRESS, true);\n      });\n\n      it('should revert when sending', async () => {\n        const value = 1n;\n\n        await expectFailedAttestation(\n          { eas },\n          schemaId,\n          { recipient: await recipient.getAddress(), expirationTime, data, value },\n          { value, from: sender },\n          'NotPayable'\n        );\n\n        await expectFailedMultiAttestations(\n          { eas },\n          [\n            {\n              schema: schemaId,\n              requests: [\n                { recipient: await recipient.getAddress(), expirationTime, data, value },\n                { recipient: await recipient.getAddress(), expirationTime, data, value }\n              ]\n            }\n          ],\n          { value, from: sender },\n          'NotPayable'\n        );\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/resolver/TokenResolver.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, SchemaResolver, TestEAS, TestERC20Token } from '../../typechain-types';\nimport { NO_EXPIRATION } from '../../utils/Constants';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('TokenResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n  let resolver: SchemaResolver;\n\n  const targetAmount = 22334;\n  let token: TestERC20Token;\n\n  const schema = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  let schemaId: string;\n  const data = '0x1234';\n  const expirationTime = NO_EXPIRATION;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    token = await Contracts.TestERC20Token.deploy('TKN', 'TKN', 9999999999);\n    await token.transfer(await sender.getAddress(), targetAmount * 100);\n\n    resolver = await Contracts.TokenResolver.deploy(await eas.getAddress(), await token.getAddress(), targetAmount);\n    expect(await resolver.isPayable()).to.be.false;\n\n    schemaId = await registerSchema(schema, registry, resolver, true);\n  });\n\n  it('should revert when attesting with the wrong token amount', async () => {\n    await expectFailedAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      { from: sender },\n      'InvalidAllowance',\n      resolver\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAllowance',\n      resolver\n    );\n\n    await token.connect(sender).approve(await resolver.getAddress(), targetAmount - 1);\n    await expectFailedAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      { from: sender },\n      'InvalidAllowance',\n      resolver\n    );\n  });\n\n  it('should allow attesting with the correct token amount', async () => {\n    await token.connect(sender).approve(await resolver.getAddress(), targetAmount);\n\n    const { uid } = await expectAttestation(\n      { eas },\n      schemaId,\n      { recipient: await recipient.getAddress(), expirationTime, data },\n      { from: sender }\n    );\n\n    await expectRevocation({ eas }, schemaId, { uid }, { from: sender });\n\n    await token.connect(sender).approve(await resolver.getAddress(), targetAmount * 2);\n\n    const res = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data },\n            { recipient: await recipient.getAddress(), expirationTime, data }\n          ]\n        }\n      ],\n      { from: sender }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schemaId,\n          requests: res.uids.map((uid) => ({ uid }))\n        }\n      ],\n      { from: sender }\n    );\n  });\n});\n"
  },
  {
    "path": "test/resolver/ValueResoler.ts",
    "content": "import { expect } from 'chai';\nimport { Signer } from 'ethers';\nimport { ethers } from 'hardhat';\nimport Contracts from '../../components/Contracts';\nimport { SchemaRegistry, TestEAS } from '../../typechain-types';\nimport { NO_EXPIRATION } from '../../utils/Constants';\nimport {\n  expectAttestation,\n  expectFailedAttestation,\n  expectFailedMultiAttestations,\n  expectMultiAttestations,\n  expectMultiRevocations,\n  expectRevocation,\n  registerSchema\n} from '../helpers/EAS';\nimport { latest } from '../helpers/Time';\nimport { createWallet } from '../helpers/Wallet';\n\ndescribe('ValueResolver', () => {\n  let accounts: Signer[];\n  let recipient: Signer;\n  let sender: Signer;\n\n  let registry: SchemaRegistry;\n  let eas: TestEAS;\n\n  const schema1 = 'bytes32 eventId,uint8 ticketType,uint32 ticketNum';\n  const schema2 = 'bytes32 eventId';\n  const schema3 = 'bool like';\n  let schema1Id: string;\n  let schema2Id: string;\n  let schema3Id: string;\n  const expirationTime = NO_EXPIRATION;\n  const data = '0x1234';\n\n  const targetValue = 12345n;\n\n  before(async () => {\n    accounts = await ethers.getSigners();\n\n    [recipient] = accounts;\n  });\n\n  beforeEach(async () => {\n    sender = await createWallet();\n\n    registry = await Contracts.SchemaRegistry.deploy();\n    eas = await Contracts.TestEAS.deploy(await registry.getAddress());\n\n    await eas.setTime(await latest());\n\n    const resolver = await Contracts.ValueResolver.deploy(await eas.getAddress(), targetValue);\n    expect(await resolver.isPayable()).to.be.true;\n\n    schema1Id = await registerSchema(schema1, registry, resolver, true);\n    schema2Id = await registerSchema(schema2, registry, resolver, true);\n    schema3Id = await registerSchema(schema3, registry, resolver, true);\n  });\n\n  it('should revert when attesting with the wrong value', async () => {\n    const value = targetValue + 1n;\n\n    await expectFailedAttestation(\n      { eas },\n      schema1Id,\n      { recipient: await recipient.getAddress(), expirationTime, data, value },\n      { from: sender },\n      'InvalidAttestation'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value },\n            { recipient: await recipient.getAddress(), expirationTime, data, value: targetValue }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value: targetValue },\n            { recipient: await recipient.getAddress(), expirationTime, data, value }\n          ]\n        }\n      ],\n      { from: sender },\n      'InvalidAttestations'\n    );\n  });\n\n  it('should allow attesting with the correct value', async () => {\n    const value = targetValue;\n    const { uid } = await expectAttestation(\n      { eas },\n      schema1Id,\n      { recipient: await recipient.getAddress(), expirationTime, data, value },\n      { from: sender }\n    );\n\n    await expectRevocation({ eas }, schema1Id, { uid }, { from: sender });\n\n    const { uids } = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value },\n            { recipient: await recipient.getAddress(), expirationTime, data, value }\n          ]\n        },\n        {\n          schema: schema2Id,\n          requests: [{ recipient: await recipient.getAddress(), expirationTime, data, value }]\n        },\n        {\n          schema: schema3Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value },\n            { recipient: await recipient.getAddress(), expirationTime, data, value }\n          ]\n        }\n      ],\n      { from: sender }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [{ uid: uids[0] }, { uid: uids[1] }]\n        },\n        {\n          schema: schema2Id,\n          requests: [{ uid: uids[2] }]\n        },\n        {\n          schema: schema3Id,\n          requests: [{ uid: uids[3] }, { uid: uids[4] }]\n        }\n      ],\n      { from: sender }\n    );\n  });\n\n  it('should revert when attempting to attest with more value than was actually sent', async () => {\n    const value = targetValue;\n\n    await expectFailedAttestation(\n      { eas },\n      schema1Id,\n      { recipient: await recipient.getAddress(), expirationTime, data, value: value + 1000n },\n      { from: sender, value },\n      'InsufficientValue'\n    );\n\n    await expectFailedMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value: value - 500n },\n            { recipient: await recipient.getAddress(), expirationTime, data, value: 500n },\n            { recipient: await recipient.getAddress(), expirationTime, data, value: 1n }\n          ]\n        }\n      ],\n      { from: sender, value },\n      'InsufficientValue'\n    );\n  });\n\n  it('should allow attesting with the correct value when accidentally sending too much', async () => {\n    const value = targetValue;\n    const { uid } = await expectAttestation(\n      { eas },\n      schema1Id,\n      { recipient: await recipient.getAddress(), expirationTime, data, value },\n      { from: sender, value: value + 1000n }\n    );\n\n    await expectRevocation({ eas }, schema1Id, { uid }, { from: sender });\n\n    const { uids } = await expectMultiAttestations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value },\n            { recipient: await recipient.getAddress(), expirationTime, data, value }\n          ]\n        },\n        {\n          schema: schema2Id,\n          requests: [\n            { recipient: await recipient.getAddress(), expirationTime, data, value },\n            { recipient: await recipient.getAddress(), expirationTime, data, value }\n          ]\n        }\n      ],\n      { from: sender, value: value * 4n + 9999n }\n    );\n\n    await expectMultiRevocations(\n      { eas },\n      [\n        {\n          schema: schema1Id,\n          requests: [{ uid: uids[0] }, { uid: uids[1] }]\n        },\n        {\n          schema: schema2Id,\n          requests: [{ uid: uids[2] }, { uid: uids[3] }]\n        }\n      ],\n      { from: sender }\n    );\n  });\n});\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"lib\": [\"dom\", \"esnext\"],\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"sourceMap\": true,\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"baseUrl\": \"./\",\n    \"paths\": {\n      \"@nomiclabs/hardhat-ethers/*\": [\"node_modules/@nomiclabs/hardhat-ethers/dist/src/*\"],\n      \"*\": [\"node_modules/*\"]\n    },\n    \"outDir\": \"./dist/typechain-types\"\n  },\n  \"include\": [\n    \"./components\",\n    \"./data\",\n    \"./deployments\",\n    \"./hardhat.config.ts\",\n    \"./scripts\",\n    \"./test\",\n    \"./typechain-types\",\n    \"./utils\"\n  ]\n}\n"
  },
  {
    "path": "tsconfig.release.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"include\": [\"./typechain-types\"]\n}\n"
  },
  {
    "path": "utils/Constants.ts",
    "content": "import { ZeroAddress } from 'ethers';\n\nexport const ZERO_ADDRESS = ZeroAddress;\nexport const ZERO_BYTES = '0x';\nexport const ZERO_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';\n\nexport const NO_EXPIRATION = 0n;\n"
  },
  {
    "path": "utils/EAS.ts",
    "content": "import {\n  hexlify,\n  Interface,\n  keccak256,\n  solidityPackedKeccak256,\n  toUtf8Bytes,\n  TransactionReceipt,\n  TransactionResponse\n} from 'ethers';\nimport { EAS__factory } from '../typechain-types';\n\nenum Event {\n  Attested = 'Attested',\n  Timestamped = 'Timestamped',\n  RevokedOffchain = 'RevokedOffchain'\n}\n\nconst TOPICS = {\n  [Event.Attested]: keccak256(toUtf8Bytes('Attested(address,address,bytes32,bytes32)')),\n  [Event.Timestamped]: keccak256(toUtf8Bytes('Timestamped(bytes32,uint64)')),\n  [Event.RevokedOffchain]: keccak256(toUtf8Bytes('RevokedOffchain(address,bytes32,uint64)'))\n};\n\nexport const getSchemaUID = (schema: string, resolverAddress: string, revocable: boolean) =>\n  solidityPackedKeccak256(['string', 'address', 'bool'], [schema, resolverAddress, revocable]);\n\nexport const getUID = (\n  schema: string,\n  recipient: string,\n  attester: string,\n  time: number,\n  expirationTime: number,\n  revocable: boolean,\n  refUID: string,\n  data: string,\n  bump: number\n) =>\n  solidityPackedKeccak256(\n    ['bytes', 'address', 'address', 'uint32', 'uint32', 'bool', 'bytes32', 'bytes', 'uint32'],\n    [hexlify(toUtf8Bytes(schema)), recipient, attester, time, expirationTime, revocable, refUID, data, bump]\n  );\n\nconst getDataFromReceipt = (receipt: TransactionReceipt, event: Event, attribute: string): string[] => {\n  // eslint-disable-next-line camelcase\n  const eas = new Interface(EAS__factory.abi);\n  const logs = [];\n\n  for (const log of receipt.logs.filter((l) => l.topics[0] === TOPICS[event]) || []) {\n    logs.push({\n      ...log,\n      log: event,\n      fragment: {\n        name: event\n      },\n      args: eas.decodeEventLog(event, log.data, log.topics)\n    });\n  }\n\n  if (!logs) {\n    return [];\n  }\n\n  const filteredLogs = logs.filter((l) => l.fragment?.name === event);\n  if (filteredLogs.length === 0) {\n    throw new Error(`Unable to process ${event} events`);\n  }\n\n  return filteredLogs.map((log: any) => eas.decodeEventLog(event, log.data, log.topics)[attribute]);\n};\n\nexport const getUIDsFromAttestReceipt = (receipt: TransactionReceipt): string[] =>\n  getDataFromReceipt(receipt, Event.Attested, 'uid');\n\nexport const getTimestampFromTimestampReceipt = (receipt: TransactionReceipt): bigint[] =>\n  getDataFromReceipt(receipt, Event.Timestamped, 'timestamp').map((s) => BigInt(s));\n\nexport const getTimestampFromOffchainRevocationReceipt = (receipt: TransactionReceipt): bigint[] =>\n  getDataFromReceipt(receipt, Event.RevokedOffchain, 'timestamp').map((s) => BigInt(s));\n\nexport const getUIDsFromMultiAttestTx = async (\n  res: Promise<TransactionResponse> | TransactionResponse\n): Promise<string[]> => {\n  const tx = await res;\n  const receipt = await tx.wait();\n  if (!receipt) {\n    throw new Error(`Unable to confirm: ${tx}`);\n  }\n\n  return getUIDsFromAttestReceipt(receipt);\n};\n\nexport const getUIDFromAttestTx = async (res: Promise<TransactionResponse> | TransactionResponse): Promise<string> => {\n  return (await getUIDsFromMultiAttestTx(res))[0];\n};\n\nexport const getUIDFromMultiDelegatedProxyAttestTx = async (\n  res: Promise<TransactionResponse> | TransactionResponse\n): Promise<string[]> => {\n  const tx = await res;\n  const receipt = await tx.wait();\n  if (!receipt) {\n    throw new Error(`Unable to confirm: ${tx}`);\n  }\n\n  return getUIDFromMultiDelegatedProxyAttestReceipt(receipt);\n};\n\nexport const getUIDFromMultiDelegatedProxyAttestReceipt = async (\n  res: Promise<TransactionReceipt> | TransactionReceipt\n): Promise<string[]> => {\n  const receipt = await res;\n  if (!receipt) {\n    throw new Error(`Unable to confirm: ${res}`);\n  }\n\n  return getUIDsFromAttestReceipt(receipt);\n};\n\nexport const getUIDFromDelegatedProxyAttestTx = async (\n  res: Promise<TransactionResponse> | TransactionResponse\n): Promise<string> => {\n  return (await getUIDFromMultiDelegatedProxyAttestTx(res))[0];\n};\n\nexport const getUIDFromDelegatedProxyAttestReceipt = async (\n  res: Promise<TransactionReceipt> | TransactionReceipt\n): Promise<string> => {\n  return (await getUIDFromMultiDelegatedProxyAttestReceipt(res))[0];\n};\n"
  },
  {
    "path": "utils/Logger.ts",
    "content": "export default console;\n"
  },
  {
    "path": "utils/Time.ts",
    "content": "const seconds = (val: bigint) => val;\nconst minutes = (val: bigint) => val * seconds(60n);\nconst hours = (val: bigint) => val * minutes(60n);\nconst days = (val: bigint) => val * hours(24n);\nconst weeks = (val: bigint) => val * days(7n);\nconst years = (val: bigint) => val * days(365n);\n\nexport const duration = { seconds, minutes, hours, days, weeks, years };\n"
  }
]